Тема лекции 14. Работа с файлами.

Один из способов для передачи данных в программу и из нее состоит в чтении и записи файлов, определяемых через значения, называемые дескрипторами (слово файл может относиться как к дисковому файлу, так и к другим устройствам , таким как дисплей , клавиатура и принтер.) Дескриптор- 16 битное число ASCIIZ строка, которого содержит обозначение дисковода, путь, имя файла и расширение.

Основные понятия, связанные с файловым вводом-выводом

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

При создании нового файла он открывается для чтения и записи.

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

При закрытии файла пополняется каталог диска и дескриптор освобождается для дальнейшего использования.

Открывая файл, DOS назначает ему очередной свободный элемент (блок описания файла) специальной системной таблицы, называемой таблицей открытых файлов (System File Table, SFT) располагаемой в оперативной памяти среди системных областей данных. Объем этой таблицы, определяющий максимальное число файлов, с которыми можно работать одновременно, задается на этапе конфигурирования DOS директивой FILES файла CONFIG.SYS.

Найдя в системе каталогов диска запись об открываемом файле, DOS записывает в выделенный ему элемент SFT (блок описания_ файла) основные характеристики файла, такие, как имя, длину, атрибуты, дату и время создания, стартовый кластер, физический адрес на диске записи каталога, содержащей информацию о файле и ряд других. Часть информации переписываётся в элемент SFT из записи каталога, часть (например, указатель на блок параметров диска, где хранится информация о физических характеристиках диска) DOS поставляет сам. Важным элементом блока описания файла является двухсловная ячейка, в которой хранится указатель файла - номер байта от­носительно начала файла, с которого начнется очередная операция записи или чтения. Наличие указателя позволяет организовать прямой доступ к файлу, т.е. чтение или запись начиная от любого места файла. Ссылку на номер выделенного файлу блока описания файла в SFT DOS возвращает в программу в виде дескриптора.

Обращение к открытому файлу (запись, чтение, изменение характеристик файла и т.д.) осуществляется по присвоенному ему дескриптору; неоткрытый файл дескриптора не имеет и система работать с ним не может. По мере выполнения операций с открытым файлом DOS модифицирует информацию в блоке SFT; содержимое SFT всегда отражает текущее состояние файла.



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

Буферы DOS, количество которых определяется директивой BUFFERS файла CONFIG.SYS, служат для ускорения работы с файлом. DOS, получив из выполняемой программы заказ на чтение некоторой порции данных из файла, находит и считывает соответствующие секторы диска (в которых, между про­чим, данных может быть больше, чем конкретно затребовала программа) и, переслав прочитанные данные в программу, помимо этого сохраняет содержимое прочитанных секторов в своих внутренних буферах. Если программа в дальнейшем передаст DOS запрос на чтение с диска или запись на диск тех данных, которые уже находятся в буферах DOS, система выполнит затребованные операции не на диске, а лишь в буферах DOS, что на несколько порядков сократит время их выполнения. Однако в этом случае состояние файла на диске не всегда отвечает его логическому образу в программе. Сброс буферов DOS на диск в процессе закрытия файла выполняет физическое обновление файла на диске и приведение его в соответствие с логическим образом в программе.

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

Наконец, при закрытии файла освобождается выделенный ему блок описания файла вместе с дескриптором. И то, и другое можно теперь использовать для работы с другим файлом. Таким образом, система может последовательно работать с неограниченным количеством файлов, но число одновременно открытых файлов определяется объемом системной таблицы файлов.

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



Одна программа может иметь максимально до 20 открытых файлов, из них 5 дескрипторов резервируются для стандартных устройств ввода/ вывода следующим образом____ _________________________________________
Указатель Название устройств Описание устройств
CON (STDIN) Стандартное устройство- ввода (обычно клавиатура)
CON (STDOUT) Стандартное устройство вывода
CON (STDERR) Устройство вывода сообщ- й об ошибках
AUX (COM) Стандартный последовательный порт
PRN (LPT1) Параллельный порт

Всего открытых файлов для всех активных программ 255.

В каждой программе допускается открытие 15 файлов. Для увеличения этого предела можно:

A) закрыть один или более стандартных дескрипторов.

Например программы, которые не вызывают функции DOS управления принтером и последовательными портами ввода-вывода могут увеличить это число (15) на 2 после выполнения следующего кода:

Mov ah,03Eh; закрыть файл.

Mov вх,3; установить в ВХ номер дискриптора AUX (3)

Int 21h; вызов DOS для закрытия файла

Int вх; установит в вх. номер дискриптора PRN (4)

Int 21h; вызов DOS для закрытия файла

B) 1 -В файл Config.sys поместить строку FILES=N,где N-нужное количество одновременно открытых файлов (этого недостаточно, так как таблица файлов находится в PSP и может содержать не более 20 описателей)

2-скопировать таблицу на новое место и указать ее новый адрес и

размер.

( В PSP программы по смещению 18 h; находится таблица описателей. Под нее отводится 20 байт, поэтому программа не может открыть одновременно больше 20 файлов. Кроме того , в PSP по смещению 32 h (слово) хранится размер таблицы описателей ,а в четырехбайтовой ячейке со смещением 34 h записан полный адрес этой таблицы ;

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

1. Создание, открытие и закрытие файла:

ЗОД - создать файл;

5Ah - создать временный файл;

5Вh - создать новый файл;

3Dh - открыть файл;

ЗЕh - закрыть файл;

68h - сбросить файл на диск;

41h - удалить файл.

2. Запись и чтение данных:

42h - установить указатель;

3Fh - читать из файла или устройства;

40h - записать в файл или устройство.

3. Изменение характеристик файла:

43h - получить или установить атрибуты файла;

56h - переименовать файл;

57h - получить или установить дату и время создания файла.

4. Поиск файла:

lAh - установить адрес области передачи данных (DTA);

2Fh - получить адрес области передачи данных (DTA);

4Eh - найти первый файл; 4Fh - найти следующий файл.

5. Операции над каталогами:

39h - создать каталог;

ЗАh - удалить каталог;

3Bh - сменить текущий каталог;

47h - получить текущий каталог.

Для работы с длинными именами файлов в DOS 7.0 (Windows 95) и

старше используется набор функций, которые вызываются как функция DOS 71h:

LFN 6^ - создать или открыть ф- л с длинным именем.

LFN41h - удаление ф- в с длинным именем LFN4Eh - найти 1- й ф- л с длинным именем.

LFN4Fh - найти следующий файл LFNA1h - закончить поиск файла.

LFN39h - создать директорию с длинным именем.

LFN3Аh - удалить директорию с длинным именем .

LFN47h - определить текущую директорию с длинным именем .

Основная литература : О2[198-208],4[230-251]

Дополнительная литература : Д20[56-87]

Контрольные вопросы:

1.Что происходит при открытии файла ?

2. Сколько файлов допускается открывать по умолчанию?

3. Что происходит при закрытии файла?

3 Каким образом можно снять ограничение на число открытых файлов для каждой программы?


9574244698390540.html
9574274665544442.html
    PR.RU™