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 содержит неверный диск