Справочник программиста на персональном компьютере фирмы IBM. Дисковые накопители - Подготовка к файловым операциям
ОГЛАВЛЕНИЕ
5.3.5 Подготовка к файловым операциям.
Языки высокого уровня, такие как Бейсик, выполняют подготови-
тельную работу для файловых операций автоматически. Однако прог-
раммы на языке ассемблера имеют достаточно работы перед тем как
создать или открыть файл. Требования отличаются, в зависимости от
того используется ли для доступа к файлу метод управляющего блока
файла или метод дескриптора файла. Для обоих методов Вам необхо-
димо строку или блок параметров, указывающих на файл и буфер для
переноса данных. MS DOS предоставляет различные наборы функций
чтения/записи для двух методов.
Средний уровень.
Метод управляющего блока файла:
Этот метод доступа к файлам требует, чтобы Вы создали блок
параметров, котрый первоначально должен содержать такую информа-
цию, которая позволяет найти файл в каталоге. Хотя FCB имеет
много полей, вообще говоря, только некоторые из них должны быть
заполнены; MS DOS заполняет большинство остальных полей информа-
цией после того, как файл открывается. Отметим, что к началу FCB
может добавляться специальное поле для создания расширенного FCB,
который объяняется ниже. Вот структура FCB:
Накопитель (DB) Число, определяющее на каком накопителе
будет искаться файл, 1 = A, 2 = B и т.д.
Если указан 0, то берется накопитель по
умолчанию, а затем система заменяет 0 на код
этого накопителя.
Имя и расширение Восьмибайтное имя файла, выравненное по
(11 байтов) левому краю должно быть дополнено пробелами
(ASCII 32), если оно меньше 8 байтов. То же
относится и к трехбайтному расширению. Между
ними не должна стоять точка.
Текущий блок (DW) DOS организует файлы блоками по 128 записей,
пронумерованных от 0 до 127. Например, сис-
тема рассматривает запись #129 файла прямого
доступа, как запись #0 блока #1 (отсчет как
для записей, так и для блоков ведется с 0).
В файлах нет специальных ограничителей ни
для блоков ни для записей. Вместо этого
смещение для блоков и записей вычисляется
исходя из длины записи, которая устанавли-
вается следующим полем FCB.
Размер записи (DW) Все функции MS DOS, связанные с чтением или
записью в файл, работают в терминах записи.
Для файлов прямого доступа важно, чтобы
размер записи был установлен равным размеру
записей, помещенных в файл. Для последова-
тельных файлов размер записи не столь важен,
однако маленький размер записи будет замед-
лять дисковые операции. Поскольку размер
сектора 512 байтов, то оптимальным является
размер записи 512 байтов. Система автомати-
чески помещает значение по умолчанию 80H
(128) в поле длины записи при открытии фай-
ла. Поэтому не забудьте установить это поле
после открытия файла.
Размер файла (DD) Размер указывается с точностью до байта. Это
поле заполняется системой при открытии фай-
ла.
Дата файла (DW) Дата записывается системой при открытии FCB.
Ее формат приведен в [5.2.5].
Текущая запись (DB) Текущая запись используется совместно с
полем текущего блока. Записи нумеруются от 0
до 127. Запись прямого доступа #200, распо-
ложенная в блоке 1, имеет номер текущей
записи равный 71 ((200 - 128) - 1).
Номер записи пря- Вместо того, чтобы требовать от программы,
мого доступа (DD) чтобы она вычисляла текущие значения блока и
записи для файла прямого доступа, MS DOS
делает эту работу сама. При операциях с
файлами прямого доступа просто поместите
номер записи в это 4-хбайтное поле. При
выполнении операции с файлом прямого доступа
MS DOS поместит нужные значения в поля теку-
щего блока и текущей записи. Помните, что
старший байт расположен в старшей ячейке.
Связь между полями текущей записи, текущего блока и номер записи
прямого доступа показана на рис. 5-3.
Простейший путь создать FCB как переменную в сегменте данных
программы. Если имя открываемого файла не меняется, то это имя
может быть прямо записано в это поле. Остаток блока инициализи-
руйте байтами ASCII 0. Только после того как FCB будет открыт (с
помощью функции 0FH прерывания 21H, как показано в [5.3.3]) Вы
должны записать в блок остальную информацию. Отметим, что FCB для
работы с простым последовательным файлом с длиной записи 128
байтов не требует дальнейших приготовлений. После создания FCB
дальнейшие операции требуют, чтобы DS:DX указывали на него. Прос-
тейшая форма его такая:
FCB DB 1,'FILENAMEEXT',25 DUP(0)
Можно также создать FCB как структуру:
FCB STRUC
DRIVE_NUM DB 0
FILE_NAME DB 8 DUP(?)
FILE_EXT DB 3 DUP(?)
BLOCK_NUM DW 0
RECORD_SIZE DW 0
FILE_SIZE DD 0
FILE_DATE DW 0
RESERVED DB 10 DUP(0)
CURRENT_REC DB 0
RANDOM_REC DD 0
FCB ENDS