next up previous contents
След.: Внутренние файлы Выше: Ввод и вывод Пред.: Основные понятия   Содержание


Внешние файлы

Внешний файл -- это файл на внешнем по отношению к программе носителе. Файл может (но не должен) иметь имя; в этом случае он называется именованным. Имя файла задается символьной строкой. Множество допустимых имен зависит от системы. Тождественность одноименных файлов на разных образах определяется системой. Для обеспечения переносимости следует использовать различные имена на разных образах, например добавляя индекс образа к имени файла.

В каждый момент времени существует множество файлов, доступных программе. Файл может существовать в системе, но не быть доступным программе. Новый файл может быть пустым. Все операторы ввода/вывода могут относиться к существующим файлам. Операторы INQUIRE и OPEN могут обращаться и к несуществующим файлам.

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

Последовательный доступ -- это доступ к записям внешнего файла по порядку. Записи в таком файле все форматированные или все неформатные, за исключением последней записи, которая может быть записью «конец файла». Запись и чтение осуществляются операторами последовательного доступа.

Прямой доступ -- это доступ к записям файла в произвольном порядке. Каждая запись однозначно определяется положительным целым числом, называемым номером записи. Он задается при записи и не может быть изменен. Записи все форматированные или все неформатные, и все записи одной длины. Запись «конец файла», если есть (в том случае, если файл доступен для последовательного доступа), не считается частью файла, присоединенного для прямого доступа. Запись и чтение осуществляются операторами прямого доступа. Ни запись, ни чтение не требуют соблюдения порядка записей: можно, например, записать запись с номером 3, хотя ни запись 1, ни запись 2 еще не записаны. Прочитать можно любую запись, если она была когда-либо записана в файл и он доступен для чтения (к примеру, принтер, как правило, для чтения не доступен). Запись нельзя удалить, но можно перезаписать.

Потоковый доступ -- это доступ к единицам хранения (см. ниже) внешнего потокового файла. Свойства зависят от того, форматный файл или неформатный. При неформатном потоковом доступе ситуация полностью аналогична прямому доступу с той разницей, что речь идет не о записях, а о единицах хранения. При форматном потоковом доступе некоторые единицы хранения могут содержать маркеры записей, что создает в файле структуру записей вдобавок к потоковой структуре. В конце файла может быть, а может и не быть маркера конца файла. Если его нет, последняя запись неполна. У записей нет ограничения по длине. Запись и чтение осуществляются операторами потокового форматного доступа. Каждая единица хранения имеет номер, называемый позицией. Первая единица в файле имеет позицию 1. Отношение позиций в файле зависит от системы: не все натуральные числа обязательно означают корректные позиции; их следует определять посредством оператора INQUIRE. Некоторые символы могут быть запрещены системой для записи или чтения из форматных потоковых файлов. Поскольку структура записей определяется маркерами, содержащимися в самом файле, неполная запись в конце файла не обязана быть пустой.

Единица хранения -- базовая единица измерения информации, хранимой в потоковом файле или записях неформатного файла. В этих единицах измеряются позиции потоковых файлов, длины неформатных записей и длины всех внешних файлов. Все эти величины выражаются целым числом единиц. Длину записи, необходимой для данных некоторого типа, можно определить с помощью оператора INQUIRE. Длина единицы хранения в битах определяется константой FILE_STORAGE_SIZE стандартного встроенного модуля, который называется ISO_FORTRAN_ENV. Стандарт рекомендует (но не требует) задавать единицу хранения восьмибитовой (один байт). Многие компиляторы задают эту единицу равной объему типа REAL (4 байта). Например, у компилятора GNU единица хранения равна байту, а у компилятора Intel -- 4 байтам.



Ilya A. Chernov 2012-12-19
X