CONFIG.SYS определяет число доступных дескрипторов в системе

Используйте функцию 5bh Создать Новый Файл, если вы не хотите

испортить существующий файл.

Функция 3dh: Открыть дескриптор файла

Вход AH = 3dh

DS:DX = адрес строки ASCIIZ с именем файла

AL = Режим открытия

Выход AX = код ошибки, если CF установлен

АХ = дескриптор файла, если нет ошибки

Описание: DS:DX указывает на строку ASCIIZ в формате: d:\путь\имя_файла",0. Если диск и/или путь опущены, они принимаются по умолчанию. При этом:

· файл должен существовать. См. функцию 3ch (Создать Файл). Файл открывается в выбранном Режиме Доступа/Режиме Открытия

AL = 0 открыть для чтения

AL = 1 открыть для записи

AL = 2 открыть для чтения и записи

· указатель чтения/записи устанавливается в 0. См. 42h (LSEEK)

· вы должны сохранить дескриптор (handle) для последующих операций

· если запрашивается открытие в одном из режимов разделения, должно быть активно разделение файлов (команда DOS SHARE).

· CONFIG.SYS определяет число доступных дескрипторов файлов.

Функция 3eh: Закрыть дескриптор файла

Вход AH = 3eh

BX = дескриптор файла

Выход AX = код ошибки, если CF установлен

Описание: BX содержит дескриптор файла (handle), возвращенный при открытии. Файл, представленный этим дескриптором, закрывается, его буферы сбрасываются, и запись в каталоге обновляется корректными размером, временем и датой. Из-за нехватки дескрипторов файлов (максимум 20, по умолчанию 8), вам может понадобиться закрыть часть стандартных дескрипторов, например, дескриптор 3 (стандартный AUX).

Функция 3fh: Читать файл через дескриптор

Вход AH = 3fh

BX = дескриптор файла

DS:DX = адрес буфера для чтения данных

CX = число считываемых байтов

Выход AX = код ошибки, если CF установлен

AX = число действительно прочитанных байтов

Описание: CX байтов данных считываются из файла или устройства с дескриптором, указанным в BX. Данные читаются с текущей позиции указателя чтения/записи файла и помещаются в буфер вызывающей программы, адресуемый через DS:DX. Используйте функцию 42h LSEEK, чтобы установить указатель файла, если необходимо (OPEN сбрасывает указатель в 0). Модифицирует указатель чтения/записи файла, подготавливая его к последующим операциям чтения или записи. Вы должны всегда сравнивать возвращаемое значение AX (число прочитанных байтов) с CX (запрошенное число байтов):

· если AX = CX, (и CF сброшен) - чтение было корректным без ошибок

· если AX = 0, достигнут конец файла (EOF)

· если AX < CX (но ненулевой):

· при чтении с устройства - входная строка имеет длину AX байт

· при чтении из файла - в процессе чтения достигнут EOF

Замечания: Эта функция превосходит сложные и неудобные FCB-функции. Она эффективно сочетает произвольный и последовательный доступ, позволяя пользователю выполнять свое собственное блокирование. Удобно использовать эту функцию для чтения стандартных дескрипторов, таких как дескрипторы стандартного ввода/вывода, взамен многочисленных буферизующих и посимвольных FCB-функций ввода. Когда вы читаете с устройства, AX возвращает длину считанной строки с учетом завершающего возврата каретки CR (ASCII 0dh).

Функция 40h: Писать в файл через дескриптор

Вход AH = 40h

BX = дескриптор файла

DS:DX = адрес буфера, содержащего записываемые данные

CX = число записываемых байтов

Выход AX = код ошибки, если CF установлен

AL = число реально считанных байтов

Описание: CX байт данных записывается в файл или на устройство с дескриптором, заданным в BX. Данные берутся из буфера, адресуемого через DS:DX. Данные записываются, начиная с текущей позиции указателя чтения/записи файла. Используйте функцию 42h LSEEK, чтобы установить указатель файла, если необходимо (OPEN сбрасывает указатель в 0). Обновляет указатель чтения/записи файла, чтобы подготовиться к последующим операциям последовательного чтения или записи. Вы должны всегда сравнивать возвращаемое значение AX (число записанных байтов) с CX (запрошенное число байтов для записи). При этом:

если AX = CX, запись была успешной, если AX < CX, встретилась ошибка (вероятно, переполнение).

Замечание: Эта функция превосходит сложные и неудобные FCB-функции. Она эффективно сочетает произвольный и последовательный доступ, позволяя пользователю осуществлять собственное блокирование. Удобно использовать эту функцию для вывода на стандартные устройства, такие как стандартный вывод, взамен использования различных функций вывода текста.

Функция 41h: Удалить файл

Вход AH = 41h

DS:DX = адрес строки ASCIIZ с именем файла

Выход AX = код ошибки, если CF установлен

Описание: DS:DX указывает на строку ASCIIZ в формате: d:\путь\имяфайла",0. Если диск и/или путь опущены, они принимаются по умолчанию. Имя файла не может содержать символы замены ('?' и '*'). Файл удаляется из заданного каталога заданного диска. Если файл имеет атрибут только чтение, то перед удалением необходимо изменить этот атрибут при помощи функции 43h CHMOD.

Функция 42h: Установить указатель файла (LSEEK)

Вход AH = 42h

BX = дескриптор файла

CX:DX = величина сдвига указателя: (CX*65536)+DX

AL = 0 переместить к началу файла +CX:DX

AL = 1 переместить к текущей позиции +CX:DX

AL = 2 переместить к концу файла +CX:DX

Выход AX = код ошибки, если CF установлен

DX:AX = новая позиция указателя файла (если нет ошибки)

Описание: Перемещает логический указатель чтения/записи к нужному адресу. Очередная операция чтения или записи начнется с этого адреса.

Замечание: Вызов с AL=2, CX=0, DX=0 возвращает длину файла в DX:AX. DX здесь - значащее слово: действительная длина (DX * 65536) + AX.

Функция 43h: Установить/опросить атрибут файла (CHMOD)

Вход AH = 43h

DS:DX = адрес строки ASCIIZ с именем файла

AL = Код подфункции:

AL = 0 - извлечь текущий атрибут файла

AL = 1-= установить атрибут файла

CX = новый атрибут файла (для подфункции 01h)

Выход AX = код ошибки, если CF установлен

CX = текущий атрибут файла (для подфункции 00h)

Описание: DS:DX указывает на строку ASCIIZ в формате: "d:\путь\имяфайла",0. Если диск и/или путь опущены, они принимаются по умолчанию. Атрибут файла извлекается или устанавливается, согласно коду в AL.

Замечание: Чтобы спрятать каталог, используйте CX=02h (а не 12h, как вы, возможно, ожидали).

Функция 44h: Управление устройством ввода/вывода (IOCTL)

Вход AH = 44h

AL = Код подфункции:

00h = дать информацию устройства

01h = уст. информацию устройства

02h = читать с символьного устройства

03h = писать на символьное устройство

04h = читать с блочного устройства

05h = писать на блочное устройство

06h = дать статус ввода

07h = дать статус вывода

08h = запрос съемного носителя

09h = запрос локального/удаленного устройства

0ah = запрос локального/удаленного дескриптора

0bh = счет повторов разделения

0ch (зарезервировано)

0dh = общий IOCTL DOS 3.2+

0eh = дать логическое устройство 3.2+

0fh = уст логическое устройство 3.2+

Выход AX = код ошибки, если CF установлен или иное значение (в зависимости от подфункции)

Описание: IOCTL предоставляет собой метод взаимодействия с устройствами и получения информации о файлах. Входные параметры и выходные значения варьируются в зависимости от кода подфункции в регистре AL.

Подф. 00h: Запросить флаги информации об устройстве

Вход BX = дескриптор файла (устройство или дисковый файл)

Выход DX= IOCTL Информация об устройстве

Подф. 01h: Установить флаги информации об устройстве

Вход BX= дескриптор файла (устройство или дисковый файл)

DX= IOCTL Информация об устройстве (DH должен быть нулевым)

Выход DX= IOCTL Информация об устройстве

Подф. 02-03: Читать (AL=02h) или Писать (AL=03h) строку IOCTL на СИМВОЛЬНОЕ устройство

Вход DS:DX=> адрес буфера (чтение) или данных (запись)

CX = число передаваемых байтов

BX = дескриптор файла (только устройство, но не файл!)

Выход AX= код ошибки, если CF установлен

Подф. 04-05: Читать (AL=04h) или Писать (AL=05h) строку IOCTL на БЛОЧНОЕ устройство

Вход DS:DX=> адрес буфера (чтение) или данных (запись)

CX= число передаваемых байтов

BL= ID диска (0 = текущий, 1 = A, и т. д.)

Выход AX = код ошибки, если CF установлен AX = действительное число переданных байтов (если CF=NC=0)

Подф. 06-07: Дать статус ввода (AL=06h) или статус вывода (AL=07h)

Вход BX = дескриптор файла (устройство или дисковый файл)

Выход AL = 0ffh - не конец файла;

AL = 0 - EOF (для дисковых дескрипторов)

AL = 0ffh - готово;

AL = 0 - не готово (для устройств)

Подф. 08h: Использует ли блочное устройство съемный носитель?

Вход BL = ID диска (0 = текущий, 1=A, и т. д.)

Выход AX = 00h - съемный носитель (т. е. гибкий диск)

АХ = 01h - несъемный (жесткий диск или RAM-диск)

АХ = 0fh код ошибки, если BL содержит неверный диск

Наши рекомендации