Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скляров И. Изучаем Assembler за 7 дней (2010).pdf
Скачиваний:
1335
Добавлен:
23.02.2015
Размер:
2.11 Mб
Скачать

http://www.sklyaroff.ru

126

Одновременно может быть открыто множество файлов. Устройства со стандартными дескрипторами, которые были перечислены выше, считаются открытыми постоянно.

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

На самом деле при записи в файл данные первоначально временно записываются во внутренний буфер системы MS-DOS, а во время закрытия файла сбрасываются на диск. Для принудительной записи из внутреннего буфера MS-DOS на диск можно использовать функцию 68h прерывания INT 21h (аналог функции fflush() в языке программирования Си) или функцию 0Dh прерывания INT 21h для критических участков программы.

Ниже перечислены практически все функции MS-DOS для работы с файлами и директориями, а в листинге 6.6 приведена программа, демонстрирующая работу с файлами.

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

3Ch (INT 21h) — создать файл

Входные данные:

AH=3Ch

CX = атрибут файла (можно комбинировать биты): бит 0: файл только для чтения бит 1: скрытый файл бит 2: системный файл

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

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

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

Возвращаемые значения:

CF=0 и AX=дескриптор файла, если не произошла ошибка

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

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

CF=1 и AX=05h, если доступ запрещен

Примечание. Если файл уже существует, то он открывается и усекается до нулевой длины.

3Dh (INT 21h) — открыть существующий файл

Входные данные:

AH=3Dh

AL = режим доступа: бит 0: открыть для чтения бит 1: открыть для записи

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

бит 4-6: режим совместного использования:

http://www.sklyaroff.ru

127

000 – режим совместимости

001 – запрет чтения и записи другими программами

010 – блокировка записи другими программами

011 – запрет чтения другими программами

100 – полный доступ

111 – сетевой FCB (доступен в течение серверного вызова)

бит 7: флаг наследования: 0 – дочерний процесс наследует дескриптор; 1- дочерний процесс не наследует дескриптор.

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

Возвращаемые значения:

CF=0 и AX=дескриптор файла, если не произошла ошибка

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

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

CF=1 и AX=05h, если доступ запрещен

CF=1 и AX=0Ch, недействительный режим доступа

5Bh (INT 21h) — создать и открыть существующий файл

Входные данные:

AH=5Bh

CX = атрибуты файла (можно комбинировать биты): такие же как в функции 3Ch

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

Возвращаемые значения:

CF=0 и AX=дескриптор файла, если не произошла ошибка

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

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

CF=1 и AX=05h, если доступ запрещен

CF=1 и AX=50h, если файл уже существует

5Ah (INT 21h) — создать и открыть временный файл

Создает файл с уникальным именем в текущем или заданном каталоге.

Входные данные:

AH=5Ah

CX = атрибуты файла (можно комбинировать биты): такие же как в функции 3Ch

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

Возвращаемые значения:

CF=0 и AX=дескриптор файла, если не произошла ошибка

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

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

CF=1 и AX=05h, если доступ запрещен

6Ch (INT 21h) — создать или открыть файл с длинным именем

Входные данные:

AH=6Ch

AL=00h

BX = режим доступа биты 0-2: тип доступа: