Глава 5. Дисковые накопители.

Раздел 3. Подготовка к работе с файлами.

Программы, написанные на языках высокого уровня могут просто открыть файл и вся подготовительная работа для операций с файлами будет выполнена автоматически. Однако программисты на языке ассемблера должны создать специальные области данных, которые используются при операциях ввода/вывода. MS DOS использует два метода доступа к файлам, метод управляющего блока файла (FCB) и метод дескриптора файла. Метод FCB сохранился с тех пор, когда MS DOS не работала с древовидной структурой каталогов, поэтому с его помощью можно получить доступ только к файлам, находящимся в текущем каталоге. Метод дескриптора файла позволяет получить доступ к любому файлу, независимо от того, какой каталог является текущим.

Поскольку теперь древовидная структура каталогов широко используется, то метод FCB становится анахронизмом, однако MS DOS продолжает поддерживать этот метод, чтобы сохранить совместимость со старым программным обеспечением и по этой причине мы рассмотрим и его. Однако в своих программах всегда используйте метод дескриптора файла. Метод дескриптора файла имеет дополнительное преимущество в том, что он требует меньше подготовительной работы. Однако в некоторых приложениях сами операции ввода/вывода при его использовании могут оказаться более сложными, чем в методе FCB. Hапример, операции чтения файла с прямым доступом с использованием метода дескриптора файла требуют чтобы программа вычисляла смещение каждой записи в файле, в то время как соответствующая функция FCB получает номер записи и делает необходимые вычисления сама.

Прежде чем читать или писать данные файл должен быть открыт. Открыть файл это значит создать и инициализировать специальную область данных, используемую MS DOS, которая содержит важную информацию о файле, такую как имя файла, имя накопителя, размер записи файла и т.д. Языки высокого уровня, такие капк Бейсик, создают эти области автоматически. Одной из таких областей является управляющий блок файла и когда используется метод FCB, то программа создает этот блок, а MS DOS читает и манипулирует его содержимым. Первоначально FCB содержит только имя файла и имя накопителя; после того как файл открывается в него добавляется информация о размере записи файла и о текущей позиции, с которой к нему будет осуществляться доступ.

С другой стороны, при доступе с помощью дескриптора файла MS DOS автоматически создает область данных для файла в произвольном месте. Затем MS DOS создает уникальный 16-битный код номера файла и впоследствии этот "номер" используется функциями DOS для идентификации того, с каким из открытых файлов производится операция. Все что нужно для нахождения файла - это стандартная строка пути, в которой может быть необязательное имя накопителя и имена подкаталогов должны быть разделены обратной косой чертой. Эти строки отличаются от стандартного запроса MS DOS только тем, что они должны завершаться байтом ASCII 0, с тем чтобы программа могла найти конец строки (такие строки называются строками ASCIIZ).

Операции по пересылке данных из или в файл требуют, чтобы была указана область памяти в которую или из которой будут направляться данные. Такой буфер определяется отведением ему места в памяти и установкой указателя на его первый байт (т.е. на младший адрес буфера в памяти). Если передано слишком много данных, то буфер переполняется и может разрушить данные, расположенные в следующих адресах памяти. Буфер может использоваться как промежуточный буфер, работающий только с небольшой порцией данных для операций чтения или записи. Или буфер может помещаться в область памяти, в которой программа действительно хранит и обрабатывает данные.

Функции доступа через управляющий блок файла определяют промежуточный буфер с помощью указателя, которой все время хранится операционной системой. Этот буфер называется область обмена с диском (disk transfer area) или DTA. K сожалению, техническая документация по IBM PC часто называет термином DTA указатель на буфер, хотя на самом деле правильно называть его указателем на DTA. После того как указатель на DTA установлен с помощью специальной функции, все файловые операции используют его до тех пор пока он не будет изменен. С другой стороны, функции, использующие дескриптор файла, должны указывать стартовый адрес буфера обмена каждый раз при вызове функции и они игнорируют указатель на DTA, используемый функциями управляющего блока файла. Рисунок 5-2 показывает два метода доступа к файлам.


<~-5.2.7 Чтение/изменение метки тома.
Содержание
5.3.1 Установка/проверка накопителя по умолчанию.-~>

Сайт управляется системой uCoz