2.3.1 Блок управления файлом (БУФ)
БУФ - это структура данных, которая организуется и
инициализируется транзитной программой, а также используется
файловой системой при доступе к файлам через оглавление. Все
операции с файлами обращаются за исходной информацией к БУФ.
Система хранит текущее состояние файла в БУФ во время исполнения
файловых операций. Кроме того, операции произвольного доступа
используют 3 байта, следующие за БУФ, для определения номера
произвольной записи.
При вызове операций, осуществляющих доступ к файлам или
оглавлению, регистры D&E должны содержать БУФ, указывающего на
файл или файлы, скоторыми должна производится операция. Для
большинства операций длина БУФ равна 33 байт, а для операций
произвольного доступа, вычисление размера файла и свободного места
на диске размер БУФ равен 36 байт.
Формат БУФ и назначение его полей приведены ниже.
где: байт 0: ДС код диска (0-16)
0 - выбор текущего диска
1 - выбор диска А
2 - выбор диска В
16- выбор диска Р
байты 1-8:И1...И8 содержат имя файла в символах верхнего
латинского регистра. Старшие биты позиций
И5-И8 могут использоваться системой и не
должны использоваться прикладной
программой. Старшие биты позиций И1-И4
могут использоваться прикладной программой
для внутренних атрибутов,
байты 9-11:Ф1...ФЗ содержат тип файла в символах верхнего
латинского регистра. Старшие биты позиций
используются системой для атрибутов файла и
не должны использоваться прикладными
программами в других целях
ФГ=1 (старший бит байта Ф1) обозначает файл R
(только для чтения)
Ф2,==1 обозначает файл типа S (системный)
байт 12: ЗК содержит номер текущего экстента, обычно
устанавливается в 0 вызывающей программой.
Может изменятся от 0 до 31 в процессе обмена
с файлом
байт 13: С1 счетчик байтов (число записей в последней
записи файла).Должен устанавливаться
прикладными программами
байт 14: С2 резервируется для системы
байт 15: СЧ счетчик записей для экстента "ЗК". Принимает
значения от 0 до 128
байты 18-31: B0-BN резервируются для системы. Содержат номера
блоков, занимаемых файлом,
байт 32: ТЗ текущая запись для обмена с файлом в
последовательном режиме. Обычно должна
устанавливаться в 0 вызывающей программой
при создании или открытии файла
байты 33-35: R0,R1,R2 номер произвольной записи от 0-65535.
Используется только в произвольном режиме
доступа к файлу: младший байт R0, старший -
Rl,6ato R2 содержит признак переполнения
Для операций доступа к оглавлению вызывающая программа перед
вызовом операции должна инициализировать байты 0-11 БУФ.
Операция переименования файла требует, чтобы новое имя было
помещено в байты 17-27 БУФ. Перед вызовом операций открытия и
создания файла вызывающая программа должна инициализировать
байты 0-12 БУФ. Обычно байт 12 устанавливается в 0. Кроме того, если
работа с файлом будет осуществлятся с начала файла в
последовательном режиме, то перед началом работы байт 32 (ТЗ)
должен быть установлен в 0. После того, как БУФ активизирован
операцией открытия или создания файла, программа не должна
модифицировать его. Исключение составляют байты 33-35 (R0, Rl, R2),
в которых программа может устанавливать номер произвольной записи
для режима произвольного доступа.
Элементы оглавления (экстенты) для каждого файла по формату
совпадают с БУФ (без байтов 33 ...35), за исключением того что байт 0
элемента оглавления содержит не ссылку на диск, а код пользователя.
При операциях открытия и создания файла элемент оглавления
помещается в память по заданному адресу. Все операции чтения или
записи должны вызываться с указанием адреса БУФ,
активизированного таким образом. При обработке файла БДОС
корректирует поля БУФ, отображая текущую позицию в файле.
Операция закрытия файла обеспечивает запись измененное БУФ в
оглавление. Необходимо подчеркнуть, что при записи файл
информация о выделенных файлу блоках данных на диск не
записывается. Это делается только при исполнении операции закрытия
файла. Поэтому необходимо, чтобы программа, изменяющая
содержымое файла, обязательно вызывала операцию закрытия файла,
иначе данные в файле будут потеряны.
Операции поиска и удаления файлов допускают использование
неявных имен. Символ ? в полях имени, типа или экстента означает
при поиске файла в оглавлении совпадение с любым символом в
данной позиции оглавления. Кроме того, операция поиска при задании
в байте О БУФ символа ? возвращает все элементы оглавления не
зависимо от кода пользователя, включая свободные элементы.
Свободные входы в оглавление содержат в байте 0 код 0Б5Н.
2.3.2 Атрибуты файла
Старшие биты файла (ИГ,...И8') и типа файла (ФГ,...ФЗ') БУФ
содержат атрибуты файла; при этом зачение 1 соответствует
булевскому true (истина) и 0 - false (ложь).
Значения атрибутов следующие:
Ф1: Атрибут "только для чтения" при этом значению 1 соответствует
"только для чтения" (read: R), а 0 - для запей (write: W) и чтения.
Ф2: системный атрибут. Файлы с этим атрибутом в области
пользователя 0 доступны из любой области пользователя в режиме
"только для чтения" с системного диска (диска А:), при этом значению
1 соответствует "системный" (system: S), а значению 0 "несистемный"
(directory: D). '
Атрибуты ИГ,...,И4' могут определятся пользователем.
Интерфейсные атрибуты И5',...,И8' используются системой и не могут
использоватся как атрибуты файла.
2.3.3 Области пользователя
Как уже отмечалось выше, область оглавления каждого диска
разделена на 16 независимых областей, каждой из которых присвоен
код пользователя от 0 до 15. В каждый текущий момент времени
только одна область пользователя доступна вызывающей программе
навсех дисках системы. Эта область может измененяться вызовом
операции БДОС 32 (получение/установка кода пользователя). Область
пользователя с кодом 0 имеет в МикроДОС особое значение. Файловая
система обеспечивает открытие файлов в режиме только для чтения в
этой области (если указанный файл имеет установленный системный
атрибут) в том случае, если в текущей области пользователя
указанный файл отсутствует. Это позволяет использовать программы с
системным атрибутом, находящиеся в области пользователя 0 на
системном диске из любой области пользователя, поэтому нет
необходимости хранить их в каждой 'области пользователя.