Справочник программиста на персональном компьютере фирмы IBM. Дисковые накопители - Подготовка к работе с файлами
ОГЛАВЛЕНИЕ
Раздел 3. Подготовка к работе с файлами.
Программы, написанные на языках высокого уровня могут просто
открыть файл и вся подготовительная работа для операций с файлами
будет выполнена автоматически. Однако программисты на языке ас-
семблера должны создать специальные области данных, которые ис-
пользуются при операциях ввода/вывода. MS DOS использует два
метода доступа к файлам, метод управляющего блока файла (FCB) и
метод дескриптора файла. Метод FCB сохранился с тех пор, когда MS
DOS не работала с древовидной структурой каталогов, поэтому с его
помощью можно получить доступ только к файлам, находящимся в
текущем каталоге. Метод дескриптора файла позволяет получить
доступ к любому файлу, независимо от того, какой каталог является
текущим.
Поскольку теперь древовидная структура каталогов широко ис-
пользуется, то метод FCB становится анахронизмом, однако MS DOS
продолжает поддерживать этот метод, чтобы сохранить совместимость
со старым программным обеспечением и по этой причине мы рассмот-
рим и его. Однако в своих программах всегда используйте метод
дескриптора файла. Метод дескриптора файла имеет дополнительное
преимущество в том, что он требует меньше подготовительной рабо-
ты. Однако в некоторых приложениях сами операции ввода/вывода при
его использовании могут оказаться более сложными, чем в методе
FCB. Например, операции чтения файла с прямым доступом с исполь-
зованием метода дескриптора файла требуют чтобы программа вычис-
ляла смещение каждой записи в файле, в то время как соответствую-
щая функция FCB получает номер записи и делает необходимые вычис-
ления сама.
Прежде чем читать или писать данные файл должен быть открыт.
Открыть файл это значит создать и инициализировать специальную
область данных, используемую MS DOS, которая содержит важную
информацию о файле, такую как имя файла, имя накопителя, размер
записи файла и т.д. Языки высокого уровня, такие капк Бейсик,
создают эти области автоматически. Одной из таких областей яв-
ляется управляющий блок файла и когда используется метод FCB, то
программа создает этот блок, а MS DOS читает и манипулирует его
содержимым. Первоначально FCB содержит только имя файла и имя
накопителя; после того как файл открывается в него добавляется
информация о размере записи файла и о текущей позиции, с которой
к нему будет осуществляться доступ.
С другой стороны, при доступе с помощью дескриптора файла MS
DOS автоматически создает область данных для файла в произвольном
месте. Затем MS DOS создает уникальный 16-битный код номера файла
и впоследствии этот "номер" используется функциями DOS для иден-
тификации того, с каким из открытых файлов производится операция.
Все что нужно для нахождения файла - это стандартная строка пути,
в которой может быть необязательное имя накопителя и имена подка-
талогов должны быть разделены обратной косой чертой. Эти строки
отличаются от стандартного запроса MS DOS только тем, что они
должны завершаться байтом ASCII 0, с тем чтобы программа могла
найти конец строки (такие строки называются строками ASCIIZ).
Операции по пересылке данных из или в файл требуют, чтобы была
указана область памяти в которую или из которой будут направлять-
ся данные. Такой буфер определяется отведением ему места в памяти
и установкой указателя на его первый байт (т.е. на младший адрес
буфера в памяти). Если передано слишком много данных, то буфер
переполняется и может разрушить данные, расположенные в следующих
адресах памяти. Буфер может использоваться как промежуточный
буфер, работающий только с небольшой порцией данных для операций
чтения или записи. Или буфер может помещаться в область памяти, в
которой программа действительно хранит и обрабатывает данные.
Функции доступа через управляющий блок файла определяют проме-
жуточный буфер с помощью указателя, которой все время хранится
операционной системой. Этот буфер называется область обмена с
диском (disk transfer area) или DTA. К сожалению, техническая
документация по IBM PC часто называет термином DTA указатель на
буфер, хотя на самом деле правильно называть его указателем на
DTA. После того как указатель на DTA установлен с помощью спе-
циальной функции, все файловые операции используют его до тех пор
пока он не будет изменен. С другой стороны, функции, использующие
дескриптор файла, должны указывать стартовый адрес буфера обмена
каждый раз при вызове функции и они игнорируют указатель на DTA,
используемый функциями управляющего блока файла. Рисунок 5-2
показывает два метода доступа к файлам.