Таким образом, в древовидной структуре каталогов имеются ссылки как в прямом, так и в обратном направлении. Эти ссылки можно использовать для проверки сохранности структуры каталогов файловой системы.
При удалении файла первый байт его имени заменяется на байт E5h (символ ’x’). Все кластеры, распределенные файлу, отмечаются в FAT как свободные. Если вы только что удалили файл, его еще можно восстановить, так как в дескрипторе сохранились все поля, кроме первого байта имени файла. Но если на диск записать новые файлы, то содержимое кластеров удаленного файла будет изменено и восстановление станет невозможным.
Остановимся подробнее на полях времени и даты создания или последней модификации файла. DOS обновляет содержимое этих полей после любой операции, изменяющей содержимое файла - создания файла, перезаписи содержимого файла, добавления данных в файл или обновления содержимого файла. После обновления файла DOS устанавливает бит архивации пятого байта атрибутов в 1.
Формат поля времени показан на рис.6.10.
Старшие пять битов содержат значение часа модификации файла, шесть битов с номерами 5-10 содержат значение минут модификации файла, и, наконец, в младших 5 битах хранится значение секунд, деленное на 2. Для того, чтобы время обновления файла уместилось в шестнадцати битах, пришлось пойти на снижение точности времени до двух секунд.
Формат даты обновления файла напоминает формат времени и показан на рис.6.11.
Для того, чтобы получить значение года обновления файла, необходимо прибавить к величине, хранимой в старших семи битах, значение 1980. Поля месяца и дня каких-либо особенностей не имеют, они полностью соответствуют календарной дате.
Поле длины в дескрипторе содержит точную длину файла в байтах. Для каталогов в поле длины записано нулевое значение. Вы не можете работать с каталогом, как с обычным файлом средствами DOS. Единственный способ прочитать каталог как файл - использовать FAT для определения цепочки занимаемых каталогом кластеров и прочитать сектора, соответствующие этим кластерам.
После низкоуровневого форматирования, формирующего адресные маркеры, маркеры данных и сектора, необходимо создать разделы диска. Операционная система MS-DOS позволяет сделать это с помощью утилиты FDISK. Версия 4.0 MS-DOS и более поздние версии не накладывают ограничений на размер разделов и логических дисков. Однако при использовании утилиты FDISK вы не сможете организовать защиту логических дисков от записи или от несанкционированного доступа.
Программы диск-менеджеров, такие, как ADM и SpeedStor, в некоторой степени решают вопросы защиты от записи и несанкционированного доступа.
В таблице разделов диска, подготовительной программой FDISK, находится информация об используемом формате таблицы размещения файлов FAT. Можно пользоваться этой информацией, но только в том случае, если диск подготовлен утилитой FDISK.
Из сказанного выше следует, что, если работа программы не должна зависеть от того, каким способом были подготовлены разделы диска, то не следует работать непосредственно с таблицей разделов диска.
Сервис файловой системы доступен программе через прерывание MS-DOS INT 21h. Многочисленные функции этого прерывания, относящиеся к файловой системе, можно разбить на следующие группы:
· получение справочной информации;
· работа с каталогами;
· работа с файлами.
Функции первой группы позволяют программе получить разностороннюю информацию, касающуюся текущего состояния дисковой подсистемы - текущие используемые диск и каталог, размер свободного места на диске, параметры логического диска и т.д.
Функции второй группы выполняют все необходимые операции с каталогами - создание, переименование, уничтожение каталогов, изменение текущего каталога и т.д.
Третья группа функций позволяет программе выполнять практически любые операции над файлами - создание, удаление, чтение-запись, переименование, копирование, пересылка и т.п.
Функции используют файловые индексы (handle). Смысл файлового индекса очень прост. Для того, чтобы начать работу с файлом, программа должна вызвать определенную функцию DOS, «открывающую» этот файл. Процесс открытия файла заключается в присвоении этому файлу определенного числа (индекса) и выполнении некоторых других инициализирующих действий. Для выполнения каких-либо операций с файлом программа, вызывая соответствующую функцию MS-DOS, должна указать индекс этого файла.
Первые пять файловых индексов зарезервированы операционной системой:
0 - стандартное устройство ввода (клавиатура);
1 - стандартное устройство вывода (экран);
2 - стандартное устройство для вывода сообщений об ошибках (экран);
3 - стандартное устройство последовательного ввода-вывода, обычно это асинхронный адаптер COM1;
4 - стандартное печатающее устройство (обычно первый принтерный порт LPT1).
Зарезервированные файловые индексы всегда доступны программе. Для устройств, соответствующих этим индексам, не требуется выполнять операцию открытия.
Одно из преимуществ файловых функций - возможность одновременной работы с файлами, находящимися в разных каталогах.
Состав функций MS-DOS, предназначенных для работы с файловой системой, достаточно разнообразен и функционально полон. Только в очень редких случаях, связанных в основном с организацией защиты информации от несанкционированного доступа, может потребоваться доступ к диску на более низком уровне. Если программа использует для работы с файлами только документированные функции операционной системы, ее работа не будет зависеть от аппаратных средств компьютера, от используемой для создания разделов диска утилиты.
Получение справочной информации
Если запустить программу, которая находится в каком-либо каталоге на одном из дисков, то эти диск и каталог становятся текущими для MS-DOS. Это можно понимать в том смысле, что программе не требуется каждый раз при работе с файлами указывать требуемый диск или каталог.
В любой момент времени программа может узнать текущие диск или каталог, а также заменить их. Для этого она должна использовать специальные функции прерывания INT 21h.
Для того, чтобы узнать номер текущего дисковода, программа может воспользоваться функцией 19h.
Для того, чтобы узнать текущий каталог, можно воспользоваться функцией 47h.
Создание, удаление и переименование каталогов
После форматирование логический диск содержит корневой каталог. Если диск форматируется как системный, в этом каталоге могут находиться дескрипторы файлов операционной системы IO.SYS, MSDOS.SYS, COMMAND.COM.
Для создания каталога используется функция 39h прерывания INT 21h.
Удалить существующий каталог можно с помощью функции 3Ah.
Пара функций 4Eh и 4Fh предназначена для сканирования каталогов.
Эти функции используются вместе следующим образом:
1. Вызывается функция 4Eh для поиска в каталоге файла, соответствующего образцу. В образце можно использовать символы ? и *, которые означают соответственно один любой символ и любое количество любых символов. Информация о найденном файле располагается в специальной области, назначенной каждой работающей программе, - области DTA.
2. Вызывается в цикле функция 4Fh для поиска остальных файлов, удовлетворяющих образцу, заданному при вызове функции 4Eh. Условие завершения цикла - отсутствие в каталоге указанных файлов.
Для создания файла предназначена функция 3Ch прерывания INT 21h. С помощью этой функции может быть создан файл как в текущем, так и в любом другом каталоге. Если файл с указанным именем уже существует, он обрезается до нулевой длины.
Дополнительно функция 3Ch выполняет операцию открытия только что созданного файла, возвращая программе файловый индекс. При создании файла программа может указать требуемые атрибуты, которые будут использованы другими функциями для определения возможности предоставления доступа к файлу.
Операционная система игнорирует попытки создания с помощью этой функции каталогов или метки диска.
Для записи данных в файл предназначена функция 40h прерывания INT 21h.
Для чтения данных из файла (или устройства посимвольной обработки) предназначена функция 3Fh прерывания INT 21h.
Установить файловый указатель в нужную вам позицию можно с помощью функции 42h прерывания INT 21h MS-DOS.
Изменение атрибутов, времени и даты файлов
Для работы с полем атрибутов файла предназначена функция 43h прерывания INT 21h. Для работы с полями времени и даты последней модификации файла предназначена функция 57h прерывания INT 21h.
Ввод-вывод для дисков в операционной системе MS-DOS буферизован. Операционная система MS-DOS имеет несколько буферов. Их количество зависит от оператора BUFFERS, находящегося в файле CONFIG.SYS. Этот оператор позволяет определить от 2 до 99 буферов. Если файл CONFIG.SYS не содержит оператора BUFFERS, по умолчанию используются два буфера.
Если программа интенсивно использует обращение к каталогам файловой системы, можно использовать утилиту MS-DOS FASTOPEN. Например, при использовании следующей команды в оперативной памяти будет храниться информация о расположении максимально о 100 файлах и каталогах:
FASTOPEN c:=100
Буферизация данных имеет и свои недостатки. Если в результате аварии в питающей сети или по какой-то другой причине компьютер выключится, то информация, хранящаяся в буферах и не записанная на диск, будет потеряна. При закрытии файла все буфера, связанные с ним, сбрасываются на диск.