Внешние файлы и файловые объекты
Значения, вводимые из внешнего для программы окружения или выводимые в это окружение, размещаются во
внешних файлах.
Внешним файлом может быть нечто внешнее по отношению к программе, которая может произвести читаемое значение или получить записываемое. Внешний файл идентифицируется строкой
{именем).
Вторая строка
(форма)
задает дополнительные системно-зависимые характеристики, которые могут быть сопоставлены с файлом, например физическая организация или права доступа. Соглашения об интерпретации таких строк должны быть приведены в приложении F.
Операции ввода и вывода выражены операциями над объектами некоторого
файлового типа, а
не непосредственно в терминах внешних файлов. Далее в этой главе термин
файл
будет всегда использоваться для ссылки на объект файлового типа; в остальных случаях будет использоваться термин
внешний файл.
Значения, передаваемые данному файлу, должны быть все одного и того же типа.
Ввод и вывод для последовательных файлов из элементов некоторого типа определены настраиваемым пакетом SEQUENTIAL_IO. Общая структура этого пакета дана ниже.
with IO_EXCEPTIONS; generic
type ELEMENT_TYPE is private;
package SEQUENTIAL_IO is
type FILE_TYPE is limited private;
type FILE_MODE is (IN_FILE, OUT_FILE); ... procedure OPEN (FILE : in out FILE_TYPE; ...); ... procedure READ (FILE : in FILE_TYPE; ITEM : out ELEMENT_TYPE); procedure WRITE (FILE : in FILE_TYPE; ITEM : in ELEMENT_TYPE); ... end SEQUENTIAL_IO;
Для определения последовательного ввода-вывода элементов данного типа должна быть описана конкретизация этого настраиваемого модуля с фактическим параметром данного типа. Конкретизация настройки содержит описание файлового типа (названного FILE_TYPE) для файлов таких элементов, а также операции над этими файлами — например, процедуры OPEN, READ и WRITE.
Ввод-вывод для файлов прямого доступа определен аналогичным способом в настраиваемом пакете DIRECT_IO. Ввод-вывод в текстовой форме определен в (ненастраиваемом) пакете TEXT_IO.
До выполнения ввода или вывода как операции над файлом должна быть установлена связь файла с внешним файлом. Когда такая связь установлена, файл называется
открытым, в
противном случае —
закрытым.
В языке не определено, что происходит с внешними файлами после завершения работы главной программы (в частности, если соответствующие файлы не были закрыты). Результат выполнения ввода-вывода над ссылочными типами зависит от реализации.
Открытый файл имеет
текущий вид,
который является значением одного из перечисленных типов: ,,
type FILE_MODE is (IN_FILE, INOUT_FILE, OUT_FILE); -— ДЛЯ DIRECT_IO type FILE_MODE is (IN_FILE, OUT.FILE); -— ДЛЯ SEQUENTIAL_IO И TEXT_IO
Эти значения соответствуют случаям, когда можно осуществить либо только чтение, либо чтение и запись, либо только запись. Вид файла может быть изменен.
Некоторые из операций управления файлами являются общими для всех трех пакетов ввода-вывода. Эти операции над последовательными файлами и файлами прямого доступа описаны в разд. 14.2.1. Дополнительные особенности ввода-вывода текстов описаны в разд. 14.3.1.
В пакете IO_EXCEPTIONS определены все исключения, которые могут быть возбуждены при вызове подпрограммы ввода-вывода; ситуации их возбуждения описаны либо при описании подпрограмм ввода и вывода (и в разд. 14.4), либо в приложении F для ошибочных ситуаций, зависящих от реализации.
Примечание.
Каждая конкретизация настраиваемых пакетов SEQUENTIAL_IO и DIRECT_IO задает разные типы FILE_TYPE; уникальным является тип FILE_TYPE в пакете TEXT_IO.
Устройство с двусторонней связью часто может быть промоделировано двумя файлами с последовательным доступом, связанными с этим устройством; один — вида IN_FILE, а другой — вида OUT_FILE. Реализация может ограничить число файлов, которые могут быть связаны с данным внешним файлом. В этом случае результат такого разделения внешнего файла несколькими объектами файлового типа зависит от реализации.
Ссылки:
вид файла 14.2.3, индекс 14.2, исключение 11, конкретизация настройки 12.3, открытый файл 14.1, пакет DIRECT_IO 14.1, 14.2, пакет EXCEPTIONS 14.5, пакет SEQUENTIAL_IO 14.2, 14.2.2, пакет TEXT_IO 14.3, перечислимый тип 3.5.1, последовательный ввод-вывод 14.2.2, последовательный доступ 14.2, процедура CREATE 14.2.1, процедура DELETE 14.2.1, процедура OPEN 14.2.1, процедура READ 14.2.4, процедура WRITE 14.2.4, процедура для файлов прямого доступа 14.2, прямой доступ 14.2, строка 3.6.3, текущий индекс 14.2, текущий размер 14, файл ' последовательного доступа 14.2.
Пред. | Уровень выше | След. |
13.10. НЕКОНТРОЛИРУЕМОЕ ПРОГРАММИРОВАНИЕ |
Содержание | 14.2. ФАЙЛЫ ПОСЛЕДОВАТЕЛЬНОГО И ПРЯМОГО ДОСТУПА |