Справочник программиста на персональном компьютере фирмы 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