Шаг 56.
Функции базовой версии DOS для работы с файлами. Блок управления файлом (FCB)

    На этом шаге мы рассмотрим структуру и назначение блока FCB.

    Для выполнения операций ввода-вывода на диске в базовой версии DOS необходимо в области данных определить блок FCB. Блок FCB не поддерживает путь доступа к файлу, поэтому он используется главным образом для обработки файлов в текущей директории. Блок FCB содержит описание файла и его записей в приведенном ниже формате. Пользователь должен инициализировать байты 0-15 и 32-36, байты 16-31 устанавливаются DOS.

Таблица 1. Структура блока FCB
Значение Назначение
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 автоматически преобразует относительный номер записи в текущие номера блока и записи.


    Приведем пример описания блока FCB:
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	?		;Относительный номер.


    Замечания.
  1. В приведенном описании блока FCB первая колонка содержит имя поля. Напомним, что придание имени полю позволит в дальнейшем обратиться с этому полю (для чтения или записи) по имени.
  2. Из описания блока FCB понятно, что существует два способа доступа к записям файла:
    • последовательный (используются байты 12 -13 и 32);
    • прямой (используются байты 33 - 36.

        Откуда компьютер "узнает", какой способ доступа с записи применить? Ответ на этот вопрос достаточно очевиден: по тем командам, которые использует программист. Существуют отдельные команды для организации последовательного доступа и команды для прямого доступа к записям файла.

    Со следующего шага мы начнем рассматривать команды, осуществляющие работу с файлами.




Предыдущий шаг Содержание Следующий шаг