|
|||||||
АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция |
Программирование файловой системы MS DOSВ машинах типа IBM PC предусмотрены два уровня обращения к магнитным дискам. При работе на нижнем уровне пользователь с помощью прерывания BIOS INT 13h обращается непосредственно к программам управления диском. Типичными операциями этого уровня являются запись или чтение сектора, позиционирования головок, форматирование дорожки. Файловая система DOS не используется; требуемая информация отыскивается не по имени файла, а по номерам поверхности, цилиндра и сектора. Верхний уровень реализуется с помощью прерывания DOS INT 21h, поддерживающего, наряду с прочими, также и функции обслуживания файловой структуры. Программист работает не с программами управления физическим диском, а с файловой системой DOS, получая возможность оперировать такими понятиями файловой системы, как логический диск, каталог, файл. Для удобства работы с большим количеством разнородных файлов в DOS используется древовидная структура каталогов. Каталог представляет собой небольшой файл, в котором содержится перечень всех подкаталогов следующего уровня и файлов, входящих в данный каталог. Каждому подкаталогу или файлу отводится одна запись размером 32 байт, в которую DOS заносит информацию о файле: имя, начальный адрес на диске (номер кластера), дата и время создания, длина в байтах, а также набор характеристик файла, называемых его атрибутами. Кроме этого, каждый каталог содержит еще две записи: о себе самом и о родительском каталоге. Файл может иметь несколько атрибутов одновременно. Так, защищенный от стирания и модификации файл содержит в байте атрибутов число 21, а если к тому же он еще объявлен скрытым, то 23. Время и дата создания файла помещаются в запись каталога после окончания работы программы с данным файлом и его закрытия. Номер кластера, с которого начинается файл, позволяет найти на диске начало файла. Информация о его последующих кластерах содержится в таблице размещения файлов (FAT от File Allocation Table). В последних четырех байтах записи каталога хранится длина файла в байтах. Если в процессе модификации размер файла изменился, DOS изменяет значение данного поля. При создании нового файла DOS сама отыскивает на диске свободное место и назначает его новому файлу, создавая соответствующую запись в каталоге. Хотя минимальной порцией информации, передаваемой контроллером диска при чтении и записи файлов, является сектор (512 байт), файловая система назначает место на диске целыми кластерами. Размер кластера на гибком диске составляет обычно два сектора (1 Кбайт); на жестком диске в кластер могут входить 4 - 8 секторов. Таким образом, минимальный физический размер файла, даже пустого, составляет один кластер. Существуют два способа выполнения операций с файлами: с использованием блоков управления файлами (FCB, File Control Block) и дескрипторов файлов (handle). Блок управления файлами представляет собой 37-байтную таблицу, содержащую информацию о файле: имя и расширение файла, его размер, длину записей в файле, номер текущей записи и т.д. Эта таблица размещается в памяти, отводимой программе. Для выполнения какой-либо операции с файлом, необходимо заполнить FCB соответствующей информацией и вызвать требуемую функцию. Другой способ операций с файлами предполагает использование дескрипторов (файловых указателей, файловых описателей), которые в первом приближении можно рассматривать как номера открытых файлов. Процедура обращения к файлу в общем виде распадается на следующие операции: - создание файла с указанным именем в указанном каталоге или открытие файла, если он был создан ранее; - запись в файл или чтение из файла; - закрытие файла. Работа с файлом, в большинстве случаев, начинается с операции его открытия, для чего предусмотрена особая функция DOS. Открывая файл, DOS ставит ему в соответствии очередной свободный элемент (блок описания файла) специальной системной таблицы, называемой таблицей открытых файлов (System File Table, SFT) и располагаемой в оперативной памяти среди системных областей данных. Объем этой таблицы задается на этапе конфигурирования DOS директивой FILES файла CONFIG.SYS. Найдя в системе каталогов диска запись об открываемом файле, DOS записывает в выделенный ему элемент SFT основные характеристики файла, такие, как имя, длину, атрибуты, дату и время создания, стартовый кластер, физический адрес на диске записи каталога, содержащий информацию о файле и ряд других. Важным элементом блока описания файла является двухсловная ячейка, в которой хранится указатель файла - номер байта относительно начала файла, с которого начнется очередная операция записи или чтения. Ссылку на номер выделенного блока описания файла в SFT открытому файлу DOS возвращает в программу в виде дескриптора. После окончания работы с файлом его надо закрыть предназначенной для этого функцией DOS. В процессе закрытия происходит сброс на диск буферов DOS, модификация записи каталога и освобождение блока описания файла в SFT вместе с закрепленным за ним дескриптором. Для облегчения ориентации в многочисленных функциях DOS, осуществляющих операции над файлами, каталогами и дисками, их удобно разбить на смысловые группы: а) создание, открытие и закрытие файла 3Ch - создать файл; 5Ah - создать временный файл; 5Bh - создать новый файл; 3Dh - открыть файл; 3Eh - закрыть файл; 68h - сбросить файл на диск; 41h - удалить файл; б) чтение и запись данных 42h - установить указатель; 3Fh - читать из файла или устройства; 40h - записать в файл или устройство; в) изменение характеристик файла 43h - получить или установить атрибуты файла; 56h - переименовать файл; 57h - получить или установить дату и время создания файла; г) поиск файла 1Ah - установить адрес области передачи данных (DTA); 2Fh - получить адрес области передачи данных (DTA); 4Eh - найти первый файл; 4Fh - найти следующий файл; д) операции над каталогами 39h - создать каталог; 3Ah - удалить каталог; 3Bh - сменить текущий каталог; 47h - получить текущий каталог; е) операции над дисками 19h - получить текущий диск; 0Eh - сменить текущий диск; 36h - получить информацию о диске. Функции 3Ch и 5Bh позволяют создавать файл с заданной спецификацией, т.е. путь к нему вместе с именем файла и расширением указывается в виде символьной строки, завершающейся двоичным нулем (строки ASCIIZ). С помощью этих функций можно создать как файл, так и метку тома (в корневом каталоге диска). Функция 5Ah используется для создания временного файла, имя которому дает система. Функция 3Dh позволяет открыть уже созданный файл. Эта функция с помощью указателя файла реализует последовательный доступ к файлу. Для организации прямого доступа к произвольному месту файла предусмотрена функция 42h, позволяющая задать положение указателя относительно начала файла. Программирование перечисленных выше функций для работы с файлами сходно с приведенным примером: ;--- в сегменте данных PATH DB 'B:FILENAME.EXT',0 BUFFER DB00 DUP(?) ;--- открытие файла с помощью функции «создания» LEA DX,PATH; DS:DX указывают путь к файлу MOV CX,0; атрибуты файла (здесь обычные) MOV AH,3Ch; номер функции INT 21h; открытие файла JC OPEN_ERROR; уход по ошибке MOV HANDLE,AX; запоминание номера файла ;--- запись в файл 1000 байт MOV AH,40h; номер функции MOV BX,HANDLE; номер файла в BX MOV CX,1000; число записываемых байтов LEA DX,BUFFER; DS:DX указывают на буфер данных INT 21h; запись данных JC OUT_ERROR; проверка на ошибки CMP AX,1000; обработка ошибок JNE FULL_DISC; при их наличии Поиск по сайту: |
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.007 сек.) |