|
[Назад] [Далее] | |
Функция DOS 3Ch — Создать файл
Ввод: | AX = 3Ch СХ = атрибут файла
бит 6: не используется бит 5: архивный бит (1, если файл не сохранялся) бит 4: каталог (должен быть 0 для функции 3Ch) бит 3: метка тома (игнорируется функцией 3Ch) бит 2: системный файл бит 1: скрытый файл бит 0: файл только для чтения |
Вывод: | CF = 0 и АХ = идентификатор файла, если не произошла ошибка CF = 1 и АХ = 03h, если путь не найден CF = 1 и АХ = 04h, если слишком много открытых файлов CF = 1 и АХ = 05h, если доступ запрещен |
Если файл уже существует, функция 3Ch все равно открывает его, присваивая ему нулевую длину. Чтобы этого не произошло, следует пользоваться функцией 5Bh.
Функция DOS 3Dh — Открыть существующий файл
Ввод: | AX = 3Dh AL = режим доступа
01: запись 10: чтение и запись биты 2 – 3: зарезервированы (0) биты 6 – 4: режим доступа для других процессов
001: все операции запрещены 010: запись запрещена 011: чтение запрещено 100: запрещений нет CL = маска атрибутов файлов |
Вывод: | CF = 0 и АХ = идентификатор файла, если не произошла ошибка CF = 1 и АХ = код ошибки (02h — файл не найден, 03h — путь не найден, 04h — слишком много открытых файлов, 05h — доступ запрещен, 0Ch — неправильный режим доступа) |
Функция DOS 5Bh — Создать и открыть новый файл
Ввод: | AX = 5Bh СХ = атрибут файла DS:DX = адрес ASCIZ-строки с полным именем файла |
Вывод: | CF = 0 и АХ = идентификатор файла, открытого для чтения/записи в режиме совместимости, если не произошла ошибка CF = 1 и АХ = код ошибки (03h — путь не найден, 04h — слишком много открытых файлов, 05h — доступ запрещен, 50h — файл уже существует) |
Функция DOS 5Ah — Создать и открыть временный файл
Ввод: | AX = 5Ah СХ = атрибут файла DS:DX = адрес ASCIZ-строки с путем, оканчивающимся символом «\», и тринадцатью нулевыми байтами в конце |
Вывод: | CF = 0 и АХ = идентификатор файла, открытого для чтения/записи в режиме совместимости, если не произошла ошибка (в строку по адресу DS:DX дописывается имя файла) CF = 1 и АХ = код ошибки (03h — путь не найден, 04h — слишком много открытых файлов, 05h — доступ запрещен) |
Функция 5Ah создает файл с уникальным именем, который не является на самом деле временным, его следует специально удалять, для чего его имя и записывается в строку в DS:DX.
Во всех случаях строка с полным именем файла имеет вид типа
filespec db 'с:\data\filename.ext',0
причем, если диск или путь опущены, используются их текущие значения.
Для работы с длинными именами файлов в DOS 7.0 (Windows 95) и старше используется еще один дополнительный набор функций, которые вызываются как функция DOS 71h.
Функция LFN 6Ch — Создать или открыть файл с длинным именем
Ввод: | AX = 716Сh ВХ = режим доступа Windows 95
001 — только для записи 010 — для чтения и записи 100 — только для чтения, не изменять время последнего обращения к файлу бит 7: файл не наследуется порождаемыми процессами бит 8: данные не буферизуются бит 9: не архивировать файл, если используется архивирование файловой системы (DoubleSpace) бит 10: использовать число в DI для записи в конец короткого имени файла бит 13: не вызывать прерывание 24h при критических ошибках бит 14: сбрасывать буфера на диск после каждой записи в файл DX = действие
бит 1: заменить файл (ошибка, если файл не существует) бит 4: создать файл (ошибка, если файл существует) DI = число, которое будет записано в конце короткого варианта имени файла |
Вывод: | CF = 0 АХ = идентификатор файла СХ = 1, если файл открыт СХ = 2, если файл создан СХ = 3, если файл заменен CF = 1, если произошла ошибка АХ = код ошибки (7100h, если функция не поддерживается) |
Если функции открытия файлов возвращают ошибку «слишком много открытых файлов» (АХ = 4), следует увеличить число допустимых идентификаторов с помощью функции 67h.
Функция DOS 67h — Изменить максимальное число идентификаторов файлов
Ввод: | AX = 67h ВХ = новое максимальное число идентификаторов (20 – 65 535) |
Вывод: | CF = 0, если не произошла ошибка CF = 1 и АХ = код ошибки, если произошла ошибка (например: 04h, если заданное число меньше, чем количество уже открытых файлов, или 08h, если DOS не хватает памяти для новой таблицы идентификаторов) |
Следует помнить, что все дочерние процессы будут наследовать только первые 20 идентификаторов и должны вызывать функцию 67h сами, если им требуется больше.