4.8.1. Создание и открытие файлов

Функция DOS ЗСк Создать файл

Вход:  АН = 3Ch

СХ = атрибут файла

бит 7: файл можно открывать разным процессам в Novell Netware бит 6: не используется

бит 5: архивный бит (1, если файл не сохранялся) бит 4: директория (должен быть 0 для функции 3Ch) бит 3: метка тома (игнорируется функцией 3Ch) бит 2: системный файл бит 1: скрытый файл

бит 0: файл только для чтения DS:DX = адрес с полным именем файла

ASCII-символов, оканчивающаяся нулем)

Выход: CF = 0 и АХ = идентификатор файла, если не произошла ошибка

CF = 1 и АХ = 03h, если путь не найден

CF   1 и АХ = 04h, если слишком много открытых файлов

CF    1 и АХ =       если доступ запрещен

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

Функция DOS3Dh: Открыть существующий файл Вход: • АН = 3Dh

AL = режим доступа

бит 0: открыть для чтения бит 1: открыть для записи биты 2-3: зарезервированы (0)

Ції Основы программирования для MS DOS

биты 6-4: режим доступа для других процессов:

ООО: режим (остальные процессы также долж-

ны открывать этот файл в режиме совместимости) все операции запрещены О1О: запись запрещена чтение запрещено 1ОО: запрещений нет бит 7: файл не наследуется порождаемыми процессами DS:DX = адрес с полным именем файла

CL = маска атрибутов файлов

Выход: CF - 0 и АХ = идентификатор файла, если не произошла ошибка

CF = 1 и АХ = код ошибки (02h - файл не найден, 03h - путь не найден, 04h - слишком много открытых файлов, 05h - доступ запрещен, ОСЬ - неправильный режим доступа)

Функция DOS     Создать и открыть новый файл

Вход:    АН = 5Bh

СХ = атрибут файла

DS:DX = адрес ASCIZ-строки с полным именем файла' Выход: CF = О и АХ = идентификатор файла, открытого для чтения/записи в режиме совместимости, если не произошла ошибка

CF = 1 и АХ = код ошибки (03h - путь не найден, 04h - слишком мно­го открытых файлов, 05h - доступ запрещен, 50h - файл

уже существует) Функция DOS     Создать и открыть временный файл

Вход:    АН - 5Ah

СХ = атрибут файла

DS:DX = адрес ASCIZ-строки с путем, оканчивающимся символом \, и тринадцатью нулевыми байтами в конце

Выход: CF = О и АХ = идентификатор файла, открытого для чтения/записи

в режиме совместимости, если не произошла ошибка (в строку по адресу DS:DX дописывается имя файла) CF = 1 и АХ = код ошибки (03h - путь не найден, 04h - слишком много открытых файлов, 05h - доступ запрещен)

Функция 5Ah создает файл с уникальным именем, который не является на самом деле временным. Такой файл следует специально удалять, для чего его имя и записывается в строку в DS:DX.

Во всех случаях строка с полным именем файла имеет вид типа

fiIespec db

причем, если диск или путь опущены, используются их текущие значения.

Для работы с длинными именами файлов в DOS 7.О (Windows 95) и Старше

используются дополнительные функции, которые вызываются так же, как функ­ция DOS 71h.

Функция LFN 6Ch: Создать или открыть файл с длинным именем Вход:    АХ = 716Ch

ВХ = режим доступа Windows 95 биты 2-О: доступ

000 - только для чтения

001 - только для записи О1О - для чтения и записи

1ОО - только для чтения, не изменять время последнего обраще­ния к файлу

биты 6-4: доступ для других процессов (см. функцию 3Dh)

бит 7: файл не наследуется порождаемыми процессами бит 8: данные не буферируются

бит 9: не архивировать файл, если используется архивирование

файловой системы (DoubleSpace)

бит 10: использовать число в DI для записи в конце короткого име­ни файла

бит 13: не вызывать прерывание 24h при критических ошибках

бит 14: сбрасывать буфера на диск после каждой записи в файл СХ = атрибут файла DX = действие

бит 0: открыть файл (ошибка, если файл существует) бит 1: заменить файл (ошибка, если файл не существует) бит 4: создать файл (ошибка, если файл существует) DS:SI = адрес ASCIZ-строки с именем файла

DI = число, которое будет записано в конце короткого варианта имени

файла Выход: CF = О

АХ = идентификатор файла

СХ - 1, если файл открыт

СХ = 2, если файл создан

СХ - 3, если файл заменен CF = 1, если произошла ошибка

АХ = код ошибки (7100h, если функция не поддерживается)

Если функции открытия файлов возвращают ошибку «слишком много откры­тых файлов» (АХ = 4), следует увеличить число допустимых идентификаторов

с помощью функции 67h.

Функция DOS 67h: Изменить максимальное число идентификаторов файлов Вход:    АН = 67h

ВХ = новое максимальное число идентификаторов (2О-65 535)

Выход: CF - 0, если не произошла ошибка

CF = 1 и АХ = код ошибки, если произошла ошибка (например: 04h, если заданное число меньше, чем количество уже от­крытых файлов, или 08h, если DOS не хватает памяти

для новой таблицы идентификаторов)

Следует помнить, что все дочерние процессы будут наследовать только пер­вые 20 идентификаторов и должны вызывать функцию 67h сами, если им требу­ется больше. '