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

Открытие файла


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

На входе: AH 3Dh
AL Требуемый режим доступа:

Бит 7: флаг наследования

0 - идентификатор файла наследуется порожденным процессом



1 - идентификатор файла не наследуется порожденным процессом

Биты 4...6: режим разделения

000 - режим совместимости

001 - запрещение всех видов доступа

010 - запрещение записи

011 - запрещение чтения

100 - разрешение всех видов доступа

Бит 3:0 - зарезервировано

Биты 0...2: вид доступа

000 - чтение

001 - запись

010 - чтение и запись

DS:DX Адрес строки, содержащей путь к файлу
На выходе: AX Код ошибки, если установлен флаг переноса CF;

Идентификатор файла, если флаг переноса CF сброшен

С помощью функции 3Dh можно открыть любой файл (но не каталог). Если требуется вид доступа "запись", открываемый файл не должен иметь атрибут "Только читаемый".

Для использования битов 4...7 (управляющих доступом к файлу другими программами в сети) должна быть запущена программа share.exe .

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

Функция 6Ch обладает расширенными возможностями по созданию и открытию файлов:

На входе: AH 6Ch
AL 00h
BX Байт флагов расширенного режима открытия файла
CX Атрибуты создаваемого файла, используется только при создании файлов
DX Выполняемая функция, если файл существует или не существует:

Биты 0-3 регистра DX задают действие, если файл существует:

0000h - если файл существует, вернуть признак ошибки;

0001h - если файл существует, открыть его;

0002h - если файл существует, заместить и открыть его.

Биты 4-7 регистра DX задают действие, если файл не существует:

0000h - если файл не существует, вернуть признак ошибки;

0001h - если файл не существует, создать и открыть его

DS:SI Адрес строки, содержащей путь к файлу
На выходе: AX Код ошибки, если флаг переноса CF установлен;

Идентификатор файла, если флаг переноса CF сброшен

CX Код выполненных действий:

0 - файл был открыт;

1 - файл был создан и открыт;

2 - файл был замещен и открыт

<
Регистр BX на входе задает флаги расширенного режима открытия файла в следующем формате:

Биты Назначение
0...2 Режим доступа при чтении или записи
3 Зарезервировано, должно быть равно 0
4...6 Режим разделения
7 Флаг наследования
8...12 Зарезервировано, должно быть равно 0
13 0 - Режим обычного использования обработчика критических ошибок INT24h (обработчик критических ошибок будет описан позже)

1 - Блокировка обработчика критических ошибок INT 24h. Для того, чтобы узнать причину ошибки, программа должна использовать функцию 59h прерывания INT 21h
14 Управление буферизацией:

0 - Использование стандартной для MS-DOS буферизации;

1 - Отмена буферизации. Использование этого режима замедлит работу с диском, однако вероятность потери информации при аварии в питающей сети уменьшится
Описанная выше функция является как бы комбинацией функций 3Dh и 3Ch (открытие и создание файла). Она удобна, но при ее использовании программа должна убедиться в том, что версия MS-DOS не ниже, чем 4.0.


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