Открытие файла
Перед тем, как начать работу с файлом, его нужно открыть. Функции, создающие новые файлы, открывают их автоматически. Для того, чтобы открыть существующий файл, вы можете воспользоваться функцией 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 - Отмена буферизации. Использование этого режима замедлит работу с диском, однако вероятность потери информации при аварии в питающей сети уменьшится |