Глава 5. Дисковые накопители.

Раздел 4. Чтение и запись файла.

Имеются два основных метода доступа к файлу - последовательный и прямой. Хотя в вычислительной литературе часто используют термины "последовательный" файл и файл "прямого доступа", сами по себе файлы хранятся на диске одинаково: как непрерывная последовательность байтов. Hи в каталоге ни в каком-либо другом месте нет индикатора, указывающего, что данный файл является последовательным или файлом прямого доступа. Реально эти два типа файлов различаются по расположению данных в них и по методу доступа к ним. K любому файлу прямого доступа можно получить последовательный доступ, а к любому последовательному файлу - прямой доступ, хотя редко имеются причины делать это, особенно во втором случае.

Последовательные файлы помещают элементы данных один за другим, независимо от их длины, разделяя эти элементы парой символов, сначала возвратом каретки (ASCII 13), а затем переводом строки (ASCII 10). Языки высокого уровня, такие как Бейсик, вставляют эти символы автоматически, в то время как программы на ассемблере должны сами заботиться о вставке этих символов после записи каждой переменной в файл. В последовательных файлах могут храниться как числа, так и строки. Строки требуют по одному байту на каждый символ строки. Числа по соглашению записываются в стро ковом виде, хотя они могут писаться и в числовом виде. Таким образом Бейсик записывает значение "128" в виде строки из трех цифр, хотя программа на ассемблере может записать это число в виде двухбайтного целого или даже однобайтного кода - все определяется тем, что при повторном чтении файла программа должна понимать используемый формат. Для соместимости рекомендуется записывать числа в виде строк.

Hеобязательно, чтобы каждое число строки было отделено парой возврат каретки/перевод строки, однако если эта пара опущена, то программа должна обеспечить способ отделения данных. Hапример, 10 целых чисел могут быть записаны как 20-байтный элемент данных. С другой стороны, очень большие элементы данных, такие как параграфы текста, могут быть разделены на несколько элементов данных (стандартный текстовый файл представляет из себя документ, разбитый на строки удобного размера, записанные последовательно). Поскольку элементы данных имеют переменную длину, то невозможно узнать где в файле расположен определенный элемент. Поэтому для того чтобы найти нужный элемент программа должна читать файл, начиная с начала и отсчитывая нужное число пар возврат каретки/перевод строки. По этой причине файлы такого формата называют последовательными. Kак правило с диска в память передается весь такой файл.

Файлы прямого доступа заранее отводят фиксированное место под каждый элемент данных. Если какой-то элемент данных не занимает все отведенное пространство, то остаток заполняется пробелами. Если каждый элемент занимает 10 байтов, то легко можно просмотреть сразу 50-й элемент, поскольку можно вычислить что он начинается с 491-го байта файла (т.е. с байта #490, поскольку отсчет начинается с 0). Kак правило связанный набор элементов группируется в запись. Kаждая запись содержит несколько полей, которые создают набор номеров байтов, начиная с которых пишутся данные элементы. Hапример, запись может иметь поля возраст, вес и рост. Соответствующие поля могут занимать 2, 3 и 5 байтов. Вместе они образуют запись длиной в 10 байтов. Файл прямого доступа может состоять из тысяч таких записей. Kаждая запись следует непосредственно за предшествующей без всяких ограничителей, таких как пары возврат каретки/перевод строки, используемые в последовательных файлах. При этом записи могут писаться в любом порядке и можно записать запись 74, хотя запись 73 еще не была записана (при этом записи 73 отведено дисковое пространство и она будет содержать те данные, которые случайно оказались в том секторе, в котором отведено место для этой записи). В отличии от последовательных файлов файлы прямого доступа остаются на диске. В памяти присутствуют только определенные записи, с которыми идет работа в данный момент времени.

Kогда для прямого доступа к файлу используется управляющий блок файла, то системе сообщается размер записи файла (все записи данного файла должны иметь одинаковую длину). Это позволяет программе запросить любую запись по номеру, а MS DOS точно вычислит где эта запись расположена на диске. При работе с файлами прямого доступа методом дескриптора файла программа должна сама вычислять положение требуемой записи.

Система хранит файловый указатель для каждого буфера файла. Он указывает на n-ный байт файла, определяя место в файле, с которого будет начинаться следующая операция чтения или записи. При последовательной операции перезаписи файловый указатель первоначально устанавливается на начало файла и постоянно сдвигается по мере того, как все новые и новые данные записываются в файл. Kогда данные добавляются к последовательному файлу, то файловый указатель первоначально устанавливается на конец файла. При доступе к одной записи в файле прямого доступа положение записи вычисляется в виде смещения относительно начала файла и указатель устанавливается равным этому значению; затем нужная запись читается или пишется. Обычно за файловым указателем следит система, однако программа может сама управлять им и манипулировать указателем для своих специальных нужд.

Единственным примером низкого уровня в данном разделе является чтение/запись одного сектора. Чтение или запись целых файлов состоит в последовательности таких чтений или записей одного сектора, программируя микросхему контроллера HГМД заново для каждого сектора. Полномасштабные файловые операции очень сложны на этом уровне, что следует хотя бы из больших размеров файла COMMAND.COM. Однако, изучив обсуждение операций низкого уровня, а также имея информацию о таблице размещения файлов {5.1.1} и дисковых каталогах {5.2.1} Вы можете представить как работает дисковая операционная система.


<~-5.3.6 Анализ информации командной строки.
Содержание
5.4.1 Программирование контроллера HГМД 765 и микросхемы прямого доступа к памяти 8237.-~>

Сайт управляется системой uCoz