Скачать 1.23 Mb.
|
Таблица 4. 2. Атрибуты файла.
Файл может иметь несколько атрибутов одновременно. Так, для записи о метке тома характерно значение байта атрибутов 28: метка тома, не архивирована. Защищенный от стирания и модификации файл содержит в байте атрибутов число 21, а если к тому же он еще объявлен скрытым, то 23. Время и дата создания файла помещаются в запись каталога после окончания работы программы с данным файлом и его закрытия. Формат этих полей приведен в табл. 4. 3 и 4. 4. Таблица 4. 3. Формат поля времени создания файла.
Таблица 4.4. Формат поля даты создания файла.
Номер кластера, с которого начинается файл, позволяет найти на диске начало файла; информация о его последующих кластерах содержится в таблице размещения фалов (FAT от File Allocation Table). В последних четырех байтах записи каталога хранится длина файла в байтах. Если в процессе модификации размер файла увеличился, DOS изменяет значение данного поля. При создании нового файла DOS сама отыскивает на диске свободное место и назначает его новому файлу, создавая и заполняя соответствующую этому файлу запись в каталоге. Хотя минимальной порцией информации, передаваемой контроллером диска в процессе записи или чтения файла, является сектор (512 байтов) (и программы BIOS работают как раз с секторами), файловая система назначает место на диске целыми кластерами. Размер кластера на гибком диске составляет обычно два сектора (1 Кбайт); на жестком диске в кластер могут входить 4-8 секторов. Таким образом, минимальный физический размер файла, даже если данные в нем занимают лишь несколько байтов, составляет один кластер. Однако в записи каталога указывается не физическая, а логическая длина файла, т. е. объем содержащихся в нем данных в байтах. Методика работы с файлами существенно определяется тем обстоятельством, что каждый файл может занимать на диске несколько несмежных областей, т.е. быть разрывным. Такая система выделения дискового пространства позволяет, во-первых, в процессе работы с файлом многократно дописывать в него новые данные, увеличивая при этом длину файла и, во-вторых, снимает проблемы с фрагментацией диска, поскольку даже самые маленькие и разрозненные свободные области на диске могут быть использованы для размещения нового файла. Следует, однако, иметь в виду, что сильно фрагментированный файл требует заметно больше времени для чтения или записи, что снижает скорость выполнения программ. Существуют два способа выполнения операций с файлами: с использованием блоков управления файлами (FCB, File control block) и дескрипторов файлов (handle). Блок управления файлами представляет собой 37-байтную таблицу, содержащую информацию о файле: имя и расширение файла, его размер, длину записей в файле, номер текущей записи и т.д. Эта таблица размещается в памяти, отводимой программе. Для выполнения какой-либо операции с файлом необходимо заполнить FCB соответствующей информацией (например, именем открываемого файла) и вызвать требуемую функцию. Использование FCB было характерно для первых версий DOS (до 2.0). FCB-структуры и соответствующие функции DOS не поддерживают древовидных каталогов, и поэтому они могут работать только с файлами из текущего каталога текущего диска. С их помощью, естественно, нельзя создавать или удалять сами каталоги. В настоящее время функции типа FCB используются редко и в данном пособии рассматриваться не будут. Другой способ операций с файлами предполагает использование] дескрипторов (файловых индексов, файловых описателей), которые в первом приближении можно рассматривать, как но'мера открытых файлов. Процедура обращения к файлу в общем случае распадается на следующие операции: создание файла с заданным именем в указанном каталоге или открытие файла, если он был создан ранее; запись в файл или чтение из файла всего содержимого либо любой его части; закрытие файла. В большинстве, случаев работа с файлом начинается с выполнения операции его открытия, для чего предусмотрена особая функция 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) выполняется автоматическое закрытие всех открытых в программе файлов. Поэтому в простых и не слишком ответственных программах файлы можно явным образом не закрывать - они все равно будут закрыты системой. файловые функции DOS чтения и записи через дескрипторы характерны тем, что их можно использовать и для ввода-вывода через стандартные устройства компьютера. При этом для работы со стандартными устройствами DOS предоставляет пять предопределенных дескрипторов: 0 - стандартный ввод (CON); 1 - стандартный вывод (CON); 2 - стандартная ошибка (CON); 3 - стандартный вспомогательный порт (AUX); 4 - стандартный принтер (PRN). Таким образом, при работе с терминалом, принтером или последовательным портом нет необходимости открывать новые дескрипторы; ввод с клавиатуры осуществляется через дескриптор 0, вывод на экран - через дескрипторы 1 или 2, вывод на принтер - через дескриптор 4. Различие дескрипторов 1 и 2 заключается в том, что стандартный вывод (как и стандартный ввод) можно перенаправить средствами DOS на любое устройство или в файл, а стандартная ошибка всегда связана с экраном. Обычно дескриптор 2 используют для вывода на экран аварийных или диагностических сообщений. Перенаправление ввода или вывода программы осуществляет командный процессор COMMAND. COM. Если в программе PROG предусмотрен ввод данных с помощью какой-либо файловой функции через дескриптор стандартного ввода (0), и вывод данных через дескриптор стандартного ввода (1), то при обычном запуске программы командой PROG. EXE программа будет требовать входные данные с клавиатуры и выводить результаты своей работы на экран. Если, однако, в команде запуска программы использовать символ перенаправления PROG. EXE > FILE. DAT система сама создаст файл FILE. DAT, и весь вывод программы будет записан в этот файл. Ввод по-прежнему будет осуществляться с клавиатуры. Запуск программы командой PROG. EXE < FILE. INI приведет к тому, что программа вместо обращения к клавиатуре попытается ввести всю требуемую ей информацию из файла FILE.INI. Естественно, этот файл должен быть заранее подготовлен пользователем. Вывод программы опять поступит на экран. Наконец, команда PROG.EXE < FILE.INI > FILE.DAT заставит программу выполняться в режиме ввода информации из файла FILE.INI и вывода в файл FILE.DAT. Ни экран, ни клавиатура использоваться не будут. Следует подчеркнуть, что, сама программа ничего не знает об этих перенаправлениях -она во всех случаях обращается к стандартному устройству ввода для ввода информации и к стандартному устройству вывода для ее вывода. Однако DOS как бы подставляет ей на входе и выходе другие устройства. Для облегчения ориентации в многочисленных функциях DOS, осуществляющих операции над файлами, каталогами и дисками, их удобно разбить на смысловые группы. ^ 3Ch - создать файл; 5Ah - создать временный файл; 5Bh - создать новый файл; 3Dh - открыть файл; 3Eh - закрыть файл; 68h - сбросить файл на диск; 4 In - удалить файл. ^ 42h - установить указатель; 3Fh - читать из файла или устройства; 40h - записать в файл или устройство. 3. Изменение характеристик файла: 43h - получить или установить атрибуты файла; 56h - переименовать файл; 57h - получить или установить дату и время создания файла. 4. Поиск файла: lAh - установить адрес области передачи данных (DTA); 2Fh - получить адрес области передачи данных (DTA); 4Eh - найти первый файл; 4Fh - найти следующий файл. 5. Операции над каталогами: 39h - создать каталог; 3Ah - удалить каталог; 3Bh - сменить текущий каталог; 47h - получить текущий каталог. ^ 19h - получить текущий диск; 0Eh - сменить текущий диск; 36h - получить информацию о диске. Функции 3Ch и 5Bh позволяют создать файл с заданной спецификацией. Спецификация файла, т.е. путь к нему вместе с именем файла и расширением указывается в виде символьной строки, завершающейся двоичным нулем ("строки ASCIIZ") Ад рес этой строки заносится в регистры DS.-DX. В регистре СХ задается код атрибутов создаваемого файла: 0 - отсутствие атрибутов, 1 - только для чтения, 2 - скрытый, 4 - систем ный, 8 - метка тома, 20h - атрибут архива. Таким образом, с помощью этих функций можно создать как "настоящий" файл, так и метку тома (в корневом каталоге диска). В регис тре АХ возвращается дескриптор созданного файла, которым можно в дальнейшем пользоваться для записи в файл или чте ния из него. Различие функций 3Ch и 5Bh проявляется лишь в случае, когда файл с заданной спецификацией уже существует. Функция 3Ch при этом фактически уничтожает имеющийся файл и создает новый с тем же именем, а функция 5Bh завершается с CF-1. Фyнкция 5Ah используется для создания временного файла, имя которому (являющееся функцией текущего времени) дает система. В" регистрах DS:DX указывается адрес пути к файлу (не имени файла!) в виде строки ASCIIZ, в конце которой должны быть предусмотрены 13 пустых байтов, куда DOS поместит обратный слэш и имя создаваемого файла, завершаемое двоичным нулем. При необходимости файлу можно придать любые атрибуты (см. описание функций 3Ch и 5Bh) кроме атрибута метки тома. Обычно временные файлы удаляются перед завершением программы, причем забота об этом лежит на программисте (автоматически файл не удаляется). Для записи в созданный временный файл следует использовать дескриптор, возвращаемый функцией 5Ah в регистре АХ. функция 3Dh позволяет открыть уже имеющийся файл. В регистрах DS:DX задается спецификация файла (путь и имя файла с расширением) в виде строки ASCIIZ; в регистре AL -режим доступа (0 - чтение, 1 - запись, 2 - чтение и запись). В дальнейшем запись в файл и чтение из него осуществляется с помощью дескриптора, возвращаемого функцией в регистре АХ. Для каждого открытого файла DOS создает и поддерживает указатель, который представляет собой относительный номер байта в файле, начиная от которого будут выполняться запись или чтение данных. Указатель только что открытого или созданного файла позиционируется системой на начало файла, а функции чтения или записи смещают его на число прочитанных или записанных байтов. Таким образом, повторное использование функций чтения или записи реализует последовательный доступ к файлу. Для организации прямого доступа к произвольному месту файла предусмотрена функция 42h, позволяющая задать положение указателя относительно начала файла (для этого надо задать AL=0), конца файла (AL=2) или текущего положения указателя (AL=1). Само значение смещения указателя (со знаком) заносится в регистры СХ (старшая половина) и DX (младшая), Функции 3Fh -и 40h используются для чтения из файла или устройства (функция 3Fh) и записи в файл или устройство (функция 40h). Перед вызовом функции в регистр ВХ помещается дескриптор, в регистр СХ - число читаемых или записываемых байтов, а в регистры DS:DX - адрес буфера в программе пользователя. Иногда возникает необходимость найти в некотором каталоге все файлы, удовлетворяющие условиям шаблона групповой операции (например, все файлы с расширением .ТХТ или все файлы с именем EXAMPLE и любыми расширениями). Поиск файлов по заданным шаблонам групповых операций осуществляется с помощью функций 4Eh (найти первый файл) и 4Fh (найти следующий файл). Для их использования необходимо с помощью функции lAh организовать в программе область передачи данных (Disk transfer area, DTA) размером не менее 43 байтов, либо с помощью функции 2Fh получить адрес области передачи данных, созданной DOS. Известно, впрочем, что в качестве DTA DOS использует область PSP от байта 80h до конца. DOS помещает в DTA информацию о найденном файле (атрибуты, время и дата создания, размер и т.д.). В частности, в байтах lEh...2Ah DTA содержится имя и расширение файла в виде строки ASCIIZ . При поиске файлов по заданному шаблону сначала активизируется функция 4Eh. В регистры DS:DX помещается адрес строки ASCIIZ с путем к рассматриваемому каталогу, а в регистр СХ - код комбинации атрибутов искомого файла. О обозначает "нормальный" файл, т.е. файл без атрибутов, 1 - только для чтения, 2 - скрытый, 4 - системный, 8 - метка тома, 10h - каталог, 20h - атрибут архивации. Если установлены атрибуты поиска, то ищутся как нормальные файлы, так и файлы с заданными атрибутами. В случае успешного нахождения заданного файла функция возвращает CF=0, а имя и расширение файла в виде строки ASCIIZ помещаются в DTA, в байты lEh...2Ah. Получив имя файла, можно открыть его с помощью функции 3Dh и выполнить далее требуемые операции (чтение, запись и т.д.). Поиск следующих файлов, удовлетворяющих условиям заданного шаблона, осуществляется с помощью функции 4Fh которая используется так же, как и функция 4Eh поиска первого файла. При необходимости функцию 4Fh можно активизировать многократно, пока CF=1 не покажет, что все файлы, удовлетворяющие условиям заданного шаблона, исчерпаны. Использование остальных перечисленных выше функций для работы с файлами не представляет особых трудностей. |
![]() | Анализ к ф. м н., доцент Рудой Евгений Михайлович 2013-2014 уч год Лекция (2 часа) Введение. Нормированные пространства. Компактные множества. Теорема Хана-Банаха | ![]() | Лекция введение Материалы данного файла могут быть использованы без ограничений для написания собственных работ с целью последующей сдачи в учебных... |
![]() | Лекция «Сущность и проблемы вэд, состояние вэд в России» 1 час. 2... Лекция «Внешнеэкономические операции и сделки: виды, классификация, организация» 1 час | ![]() | Лекция 1 введение Петрофизика сформировалась к началу 60-х годов, когда появились обобщающие труды по всем вопросам изучения физических свойств пород... |
![]() | 1. Лекция: Введение. История, предмет, структура информатики Хотя информатика и считается достаточно молодой наукой по отношению ко многим другим отраслям знания, но предпосылки к ее зарождению... | ![]() | Лекция №1. Введение в Экономикс. Основная проблема экономики и производственные... Под материальными потребностями подразумевается желания потребителей приобрести и использовать товары и услуги, которые доставят... |
![]() | Лекция №1 Лекция № Общие принципы эффективной организации учебного процесса. Физиологическая цена учебных нагрузок | ![]() | Лекция №1 Лекция № Общие принципы эффективной организации учебного процесса. Физиологическая цена учебных нагрузок |
![]() | Лекция №1 Лекция № Общие принципы эффективной организации учебного процесса. Физиологическая цена учебных нагрузок | ![]() | Лекция №1 Лекция № Общие принципы эффективной организации учебного процесса. Физиологическая цена учебных нагрузок |