На этом шаге мы рассмотрим структуру и назначение блока FCB.
Для выполнения операций ввода-вывода на диске в базовой версии DOS необходимо в области данных определить блок FCB. Блок FCB не поддерживает путь доступа к файлу, поэтому он используется главным образом для обработки файлов в текущей директории. Блок FCB содержит описание файла и его записей в приведенном ниже формате. Пользователь должен инициализировать байты 0-15 и 32-36, байты 16-31 устанавливаются DOS.
Значение | Назначение |
---|---|
0 | Указывает дисковод: 01 для дисковода A, 02 для B и т.д. |
1 - 8 | Имя файла, выровненное по левой границе с конечными пробелами, если имя меньше 8 байт. |
9 - 11 | Тип файла для дополнительной идентификации, например, DTA или ASM. Если тип файла меньше трех байт, то он должен быть выровнен по левой границе и дополнен конечными пробелами. |
12 - 13 | Номер текущего блока. Блок содержит 128 записей. Для обращения к конкретной записи используется номер текущего блока и номер текущей записи (байт 32). Первый блок файла имеет номер 0, второй - 1 и т.д. Операция открытия файла устанавливает в данном поле 0. |
14 - 15 | Логический размер записи. Операция открытия устанавливает в этом поле значение 128 (80H). После открытия и перед любой операцией чтения или записи можно устанавливать в данном поле любое требуемое значение длины записи. |
16 - 19 | Размер файла. При создании файла DOS вычисляет и записывает это значение (произведение числа записей на размер записи) в оглавление. Операция открытия выбирает размер файла из оглавления и заносит его в данное поле. Программа может читать значение из этого поля, но не может изменять его. |
20 - 21 | Дата. При создании или последней модификации файла DOS записывает дату в оглавление. Операция открытия выбирает дату из оглавления и заносит ее в данное поле. |
22 - 31 | Зарезервировано DOS. |
32 | Текущий номер записи. Данное поле содержит текущий номер записи (0-127) в текущем блоке. DOS использует текущие значения блока и записи для локализации записи в дисковом файле. Обычно номер начальной записи в данном поле - 0, но его можно заменить на любое значение от 0 до 127. |
33 - 36 | Относительный номер записи. Используется для произвольного доступа к записи при операциях чтения или записи. Данное поле должно содержать относительный номер записи. Например, для чтения записи номер 25 (19H), без предварительного чтения первых 24 записей, необходимо установить в данном поле значение 19000000. В случае произвольного доступа DOS автоматически преобразует относительный номер записи в текущие номера блока и записи. |
FILE LABEL BYTE ;Список параметров. FCBDRV DB 03 ;Диск C. FCBNAME DB 'PROBA ' ;Имя файла, дополненное ;тремя пробелами. FCBEXT DB 'DAT' ;Расширение. FCBBLK DW 0000 ;Номер текущего блока. FCBRCSZ DW ? ;Размер логической записи. DD ? ;Размер файла (DOS). DW ? ;Дата (DOS). DT ? ;Зарезервировано (DOS). FCBSQRC DB 00 ;Номер текущей записи. FCBOTRC DD ? ;Относительный номер.
Откуда компьютер "узнает", какой способ доступа с записи применить? Ответ на этот вопрос достаточно очевиден: по тем командам, которые использует программист. Существуют отдельные команды для организации последовательного доступа и команды для прямого доступа к записям файла.
Со следующего шага мы начнем рассматривать команды, осуществляющие работу с файлами.