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 сами, если им требуется больше. '