MS-DOS для программиста

         

Запись данных в файл


Для записи данных в файл предназначена функция 40h прерывания INT21h . В качестве параметров для этой функции необходимо указать идентификатор файла, полученный при открытии существующего файла или создании нового, адрес блока памяти, содержащего данные для записи и размер этого блока памяти:



На входе: AH 40h
BX Идентификатор открытого файла
CX Количество записываемых байт
DS:DX Адрес блока памяти, содержащего записываемые данные
На выходе: AX Код ошибки, если был установлен флаг переноса CF;

Количество действительно записанных байт, если флаг переноса CF сброшен

При записи данные попадают в то место внутри файла, которое определяется содержимым так называемого файлового указателя позиции. При создании нового файла этот указатель сбрасывается в 0, что соответствует началу файла. При открытии файла с помощью функции 3Dh указатель также устанавливается на начало файла. Операция записи в файл с помощью функции 40h продвигает указатель вперед к концу файла на количество записанных байт.

По мере увеличения размера файла ему будут распределяться все новые и новые кластеры из числа отмеченных как свободные.

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

Следует учитывать, что количество действительно записанных байт может не совпадать с заданным в регистре CX при вызове функции 40h. Такая ситуация возможна, например, при записи в файл, открытый в текстовом режиме, байта 1Ah. Этот байт означает конец текстового файла. Другая возможная причина - отсутствие свободного места на диске.

Если функция вызывается с содержимым регистра CX, равным 0, файл будет обрезан или расширен до текущего положения файлового указателя.

Разумеется, если программа, выполняющая запись в файл, работает в сети, она должна иметь соответствующие права доступа к каталогу и файлу.

Функция 40h может выполнять запись не только в файл, но и в символьное устройство, предварительно открытое функцией 3Dh. Об этом мы говорили в разделах книги, посвященных драйверам.



Содержание раздела