Assembler - язык неограниченных возможностей

         

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


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

Ввод: AX = 3Ch
СХ = атрибут файла

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

    бит 6: не используется

    бит 5: архивный бит (1, если файл не сохранялся)

    бит 4: каталог (должен быть 0 для функции 3Ch)

    бит 3: метка тома (игнорируется функцией 3Ch)

    бит 2: системный файл

    бит 1: скрытый файл

    бит 0: файл только для чтения



DS:DX = адрес ASCIZ-строки с полным именем файла (ASCIZ-строка ASCII-символов, оканчивающаяся нулем)

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

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

Функция DOS 3Dh — Открыть существующий файл

Ввод: AX = 3Dh
AL = режим доступа

    биты 0 – : права доступа

    00: чтение

    01: запись

    10: чтение и запись

бит 1: открыть для записи

биты 2 – 3: зарезервированы (0)

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

    000: режим совместимости (остальные процессы также должны открывать этот файл в режиме совместимости)

    001: все операции запрещены

    010: запись запрещена

    011: чтение запрещено

    100: запрещений нет

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

DS:DX = адрес ASCIZ-строки с полным именем файла

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


    биты 2 – 0: доступ


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

    001 — только для записи

    010 — для чтения и записи

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


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

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

бит 8: данные не буферизуются

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

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

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

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

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

DX = действие


    бит 0: открыть файл (ошибка, если файл не существует)

    бит 1: заменить файл (ошибка, если файл не существует)

    бит 4: создать файл (ошибка, если файл существует)


DS:SI = адрес ASCIZ-строки с именем файла

DI = число, которое будет записано в конце короткого варианта имени файла
Вывод: CF = 0
АХ = идентификатор файла
СХ = 1, если файл открыт
СХ = 2, если файл создан
СХ = 3, если файл заменен
CF = 1, если произошла ошибка
АХ = код ошибки (7100h, если функция не поддерживается)
<


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

Функция DOS 67h — Изменить максимальное число идентификаторов файлов

Ввод: AX = 67h
ВХ = новое максимальное число идентификаторов (20 – 65 535)
Вывод: CF = 0, если не произошла ошибка
CF = 1 и АХ = код ошибки, если произошла ошибка (например: 04h, если заданное число меньше, чем количество уже открытых файлов, или 08h, если DOS не хватает памяти для новой таблицы идентификаторов)
Следует помнить, что все дочерние процессы будут наследовать только первые 20 идентификаторов и должны вызывать функцию 67h сами, если им требуется больше.


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