Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Konspect.doc
Скачиваний:
2
Добавлен:
03.05.2019
Размер:
530.94 Кб
Скачать

5. Организация файлов в dos

Файл – это поименованная последовательность байтов, организованных в виде так называемых записей. Записи могут быть переменной или постоянной длины. В DOS не поддерживается информация о длине записи. Для файлов с постоянной длиной записи используется прямой или последовательный доступ к записям. Для указания текущей записи используется файловый указатель File Pointer (FP). FP хранит смещение либо от начала файла, либо от конца (FP задается с помощью функции 42h прерывания int 21h).

Информация в виде файлов организуется обычно для внешних запоминающих устройств. Физически информация размещается на поверхности диска, который покрыт магнитным материалом. При изготовлении на диске создаются дорожки (треки), которые программно разбиваются на секторы. Для доступа к сектору задается физический адрес следующим образом:

№ трека № считывающей головки № сектора.

Распределение дискового пространства для файлов задается в таблице с именем FAT (File Allocation Table). Файловая система также имеет имя FAT. Существуют другие файловые системы, например, NTFS – New Type File System, используемая в ОС семейства Windows NT. VFHT – виртуальная файловая система. HPFS – высокопроизводительная файловая система.

Таблица FAT хранится на диске, начиная со второго сектора. Файлы организованы в виде совокупности порций – кластеров. Размер кластера составляет 2n секторов (размер сектора 512 байт). Таблица состоит из элементов, имеющих размер 16 бит. Каждый m-ый элемент, за исключением нулевого и первого, описывает m-ый кластер области данных. Нумерация кластеров начинается с номера два. Каждый m-ый элемент FAT содержит либо номер следующего кластера, принадлежащего файлу, либо специальный код.

- - - - - - -- 3 F F F F 0 0 0 0

0 1 2 3 4

0-й элемент описывает тип накопителя (F8 – жесткий диск).

2-й элемент указывает номер кластера, с которого начинается первый файл данных. Специальный код 0000 обозначает свободный кластер, а FFFF обозначает кластер, являющийся последним в файле.

Логически информация на диске разделяется на 4 области:

BIOS

FAT 1,2

Корневой каталог

Область файлов и

Подкаталогов

Корневой каталог отличается от подкаталога:

  • Корневой каталог содержит метку диска (тома).

  • Длина его фиксирована.

  • Фиксировано местоположение каталога.

  • Фиксировано имя каталога. “\” – Microsoft.

  • Корневой каталог нельзя стереть.

Для описания каждого файла (и подкаталога) используется 32-байтный элемент каталога, представляющий следующую информацию:

  • Имя – 8 байт.

  • Расширение – 3 байта.

  • Атрибут файла, определяющий его тип.

  • Резерв.

  • Время создания или изменения файла.

  • Дата создания или изменения файла.

  • Адрес начала файла (номер начального кластера).

  • Размер файла в байтах.

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

Корневой каталог можно считать корнем графического дерева, у которого ветвями служат подкаталоги, а файлы соответствуют листьям. При создании подкаталога (с помощью функций DOS) создаются 2 дополнительных элемента с фиксированными именами “.” и ”..”. Имя “.” служит для описания текущего файла, т. е. для описания создаваемого подкаталога. Имя “..” описывает родительский каталог. Многократное описание подкаталога упрощает его поиск. Описание подкаталога хранится в трех местах:

  • В родительском каталоге.

  • В текущем каталоге (в самом себе).

  • В подчиненном каталоге.

Структура взаимосвязей хранимой файловой информации и набор операций над файлами составляют файловую систему.

Для манипулирования созданными файлами требуется информация, характеризующая обрабатываемый файл. Эта информация формируется в виде FCB – блока управления файлом (48 байт). Блок управления создается динамически перед началом обработки файла. Для создания FCB используется функция DOS, позволяющая открыть файл. При открытии файла формируется FCB. Открыть файл означает: обнаружить файл с заданным именем в каталоге, выделить в ОЗУ место для хранения формируемого FCB, перенести из каталога нужную информацию в FCB, возвратить программе, которая с помощью функции DOS открывает файл с заданным именем логический номер файла, который используется для последующего доступа к файлу. Логический номер файла называют также файловым манипулятором. Файловый манипулятор (FM) идентифицирует FCB и файл.

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

STDIN 0 – обозначается CON (консоль). Стандартное входное устройство, обычно

клавиатура.

STDOUT 1 – Обозначается CON. Стандартное выходное устройство (монитор).

STDERR 2 – Обозначается CON. Стандартное выходное устройство для сообщения

об ошибках, обычно на экран.

3 – Обозначается AUX. Стандартное внешнее устройство ввода-вывода.

Используется последовательный адаптер COM-порт.

4 – Обозначается PRN, LPT1. Стандартное устройство печати.

5,6,7 – Выделяются для пользовательских нужд. Количество выделяемых

номеров можно увеличить

При обращении к функциям DOS для выполнения записи (или чтения) используется FM. После завершения записи (или чтения) файл нужно закрыть. При закрытии файла осуществляются следующие действия:

  1. разрывается связь между FCB и файлом (FCB удаляется) и освобождается FM.

  2. Информация из FCB переносится в каталог, актуализируя описание обработанного файла.

  3. Содержимое всех буферов, выделенных в ОЗУ для организации записи или чтения файла, перемещается на диск. Этим обеспечивается целостность данных.

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

Пример чтения из последовательного файла в буфер, созданный в программе.

Пусть на диске создан файл, местоположение которого следующее: D:\GR\text.txt

Пусть требуется прочесть из файла 100 байт. Алгоритм программы чтения из файла предусматривает следующие действия:

  • Необходимо выделить буфер памяти размером 100 байт.

  • Выделить два байта для хранения FM (номера файла).

  • В сегменте данных определить переменную, содержащую описание местоположения файла на диске.

  • Открыть файл (функция 3D DOS вызывается командой int 21h).

  • Задать режим доступа к файлу (чтение).

  • Осуществить чтение данных (функция 3F DOS вызывается командой int 21h).

  • Закрыть файл (функция 3E DOS вызывается командой int 21h).

  • Обработать возможные ошибки манипулирования файлом.

  • Завершить программу обработки файла.

TITLE file

.model small

.stack 100h

.data

buf db 100 dup(?)

FM dw ? ;для хранения номера файла, получаемого от DOS

Name1 db ‘D:\group\text.txt’, 0 ; местоположение файла, заданное в формате

file proc ; ASCII

mov ax, @data

mov ds, ax

mov ax, 3D00h ; в ah задан номер функции открытия файла, в al задан режим

; доступа.

lea dx, Name1 ;в ds:dx размещается адрес строки, содержащей идентификацию

;файла.

int 21h ; вызов функций открытия файла.

mov dl,'O' ; символ для идентификации ошибки, которая могла возникнуть

; при открытии файла

jc _ERR ; если ошибка возникает при открытии файла, то осуществляется

; переход (ближний) к обработке ошибки.

;выполнение дальнего перехода осуществляется так: jnc mm

;jmp _ERR

;mm:

mov FM, ax ; если нет ошибок, то FM сохраняется.

;чтение данных из файла.

mov ah, 3Fh ; в ah задан номер функции чтения из файла.

mov bx, FM ; регистр bx должен содержать логический номер файла.

mov cx, 100 ; в cx количество читаемых байтов.

lea dx, buf ; в ds:dx указывается адрес буфера для ввода данных из файла.

int 21h ; вызов функции чтения.

mov dl, ‘R’

jc _ERR

; закрытие файла

mov ah, 3Eh ;в ah задан номер функции закрытия файла.

mov bx, FM

int 21h

mov dl, ‘C’

jc _ERR

jmp exit

_ERR: mov ah, 02h ; вывод символа, идентифицирующего возможную ошибку.

int 21h

exit: ret

file endp

end

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