Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
SP_MET_2.DOC
Скачиваний:
13
Добавлен:
02.05.2019
Размер:
689.66 Кб
Скачать
      1. Создание и открытие файлов

Операция создания файла приводит к созданию на диске файла нулевой длины и его открытию.

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

Ввод: АН = 3Ch

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

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

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

CF = 1, если произошла ошибка, при этом АХ = код ошибки (03h, 04h или 05h)

Имена файлов при использовании функций DOS должны определяться в ASCIZ-формате, то есть представлять собой строку ASCII-символов, оканчивающуюся нулевым байтом (Zero). Имя может указываться полностью или частично, не включая текущий диск или путь к текущему каталогу. Пример описания имени файла в программе:

fname db 'C:\PROGRAM\TASM\HELLO.ASM', 0

При описании можно использовать также строчные символы. Две точки в начале имени могут указывать, что файл находится в родительском каталоге по отношении к текущему каталогу.

Каждому файлу на диске соответствуют определенные атрибуты — битовые признаки, придающие файлам определенные свойства. Несмотря на то, что при вызове функции атрибуты задаются в словном регистре СХ, используется лишь младший его байт в следующем формате:

n

a

d

v

s

h

r

( описаны установленные состояния битов)

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

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

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

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

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

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

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

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

Разумеется, файл может иметь несколько атрибутов одновременно, хотя имеются недопустимые комбинации атрибутов (например, метка тома и каталог).

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

Признаком безошибочной работы всех файловых функций DOS, использующих идентификаторы файлов, является сброшенный флаг CF. Если по окончании работы функции CF = 1, это свидетельствует о возникновении какой-либо ошибки. При этом в регистре АХ возвращается код ошибки. Коды ошибок стандартны для всех функций, их перечень приведен ниже в табл. 5.

Таблица 5. Коды и описания ошибок DOS

код

описание ошибки

код

описание ошибки

01h

Неверный номер функции

0Ah

Неверное окружение

02h

Файл не найден

0Bh

Неверный формат

03h

Путь не найден

0Ch

Неверный режим доступа

04h

Слишком много открытых файлов

0Dh

Неверная дата

05h

Доступ не разрешен

0Eh

(не используется)

06h

Неверный идентификатор

0Fh

Задан неверный диск

07h

Разрушены блоки управления памятью

10h

Нельзя удалить текущий каталог

08h

Недостаточно памяти

11h

Не то устройство

09h

Неверный адрес блока памяти

12h

Больше нет искомых файлов

Начиная с DOS версии 3 можно уточнить информацию об ошибке с помощью функции 59h.

В отличие от операции создания, операция открытия файла обеспечивает доступ к уже существующему файлу, причем доступ можно ограничивать.

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

Ввод: АН = 3Dh

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

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

бит 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)

Режим доступа к файлу регламентирует операции, выполняемые с открытым файлом. При работе в однозадачном однопользовательском режиме используются лишь младшие два бита байта атрибутов (то есть значения: 0 — чтение, 1 — запись, 2 — чтение и запись). Например, из файла, открытого в режиме доступа 0, можно только считывать данные, запись же в него будет блокироваться с кодом ошибки "Доступ не разрешен".

Если DOS функционирует в сетевой среде, то к одному и тому же файлу в произвольный момент времени могут пытаться обратиться несколько процессов. В соответствии с этим, начиная с DOS версии 3 список возможных режимов доступа значительно расширился (см. описание байта атрибутов выше).

Для предотвращения перезаписи существующего файла при создании файла с тем же именем вместо проверки существования файла можно использовать специальную функцию "Создать новый файл". В случае совпадения имен функция завершится с ошибкой 50h.

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

Ввод: АН = 5Bh

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

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

Вывод: CF = 0 и АХ = идентификатор файла, открытого для чтения/записи в режиме совместимости, если не произошла ошибка; иначе:

CF = 1 и АХ = код ошибки (03h, 04h, 05h или 50h: файл уже существует)

В DOS имеется функция создания файла с произвольным уникальным именем, который можно использовать, например, для временного хранения данных.

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

Ввод: АН = 5Ah

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

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

Вывод: CF = 0 и АХ = идентификатор файла, открытого для чтения/записи в режиме совместимости, если не произошла ошибка (в строку по адресу DS:DX дописывается имя файла)

CF = 1 и АХ = код ошибки (03h, 04h или 05h)

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

Для работы с длинными именами файлов (LFN) в DOS 7.0 (Windows 95) и старше используется еще один дополнительный набор функций, ко­торые вызываются как подфункции функции DOS 71h.

Функция LFN 6Ch — Создать или открыть файл с длинным именем

Ввод: АХ = 716Ch

ВХ = режим доступа Windows 95

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

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

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

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

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

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

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

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

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

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

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

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

CX = атрибут файла

DX = действие

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

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

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

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

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

Вывод: CF = 0

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

CX = 1, если файл открыт

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

CX = 3, если файл заменен

CF = 1, если произошла ошибка

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

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

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

Ввод: AH = 67h

BX = новое максимальное число идентификаторов файлов (20 – 65535)

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

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

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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]