Справочник Ada 95
A.7 Внешние файлы и объекты файлов
Статическая семантика
Значения, вводимые из внешней среды программы или выводимые во внешнюю среду, считаются занимающими внешние файлы. Внешний файл может быть чем угодно, что находится за пределами программы, что может произвести значение для чтения или принять значение для записи. Внешний файл идентифицируется строкой (имя). Вторая строка (формат) предоставляет дополнительные характеристики, зависящие от системы, такие как физическая организация или права доступа. Конвенции, регулирующие интерпретацию таких строк, должны быть задокументированы.
Операции ввода-вывода выражаются как операции над объектами некоторого типа файла, а не непосредственно в терминах внешних файлов. В остальной части этого раздела термин файл всегда используется для обозначения объекта файла; термин внешний файл используется в противном случае.
Ввод-вывод для последовательных файлов значений одного типа элемента определяется с помощью обобщенного пакета Sequential_IO. Для определения последовательного ввода-вывода для данного типа элемента необходимо объявить экземпляр этого обобщенного блока с заданным типом в качестве фактического параметра. Результирующий пакет содержит объявление типа файла (называемого File_Type) для файлов таких элементов, а также операции, применимые к этим файлам, такие как процедуры Open, Read и Write.
Ввод-вывод для файлов прямого доступа определяется аналогичным образом с помощью обобщенного пакета Direct_IO. Ввод-вывод в удобочитаемой форме определяется (не обобщенными) пакетами Text_IO для данных Character и String и Wide_Text_IO для данных Wide_Character и Wide_String. Ввод-вывод для файлов, содержащих потоки элементов, представляющих значения, возможно, разных типов, определяется с помощью (не обобщенного) пакета Streams.Stream_IO.
Перед выполнением операций ввода-вывода с файлом файл должен быть связан с внешним файлом. Пока такое соединение действует, файл считается открытым, а в противном случае файл считается закрытым.
Язык не определяет, что происходит с внешними файлами после завершения основной программы и всех задач библиотеки (в частности, если соответствующие файлы не были закрыты). Эффект ввода-вывода для типов доступа не определен.
Открытый файл имеет текущий режим, который является значением одного из следующих типов перечисления:
type File_Mode is (In_File, Inout_File, Out_File); -- для Direct_IO
Эти значения соответствуют, соответственно, случаям, когда необходимо выполнять только чтение, чтение и запись или только запись.
type File_Mode is (In_File, Out_File, Append_File);
-- для Sequential_IO, Text_IO, Wide_Text_IO и Stream_IO
-- для Sequential_IO, Text_IO, Wide_Text_IO и Stream_IO
Эти значения соответствуют, соответственно, случаям, когда необходимо выполнять только чтение, только запись или только добавление.
Режим файла может быть изменен.
Несколько операций управления файлами являются общими для Sequential_IO, Direct_IO, Text_IO и Wide_Text_IO. Эти операции описаны в подпункте A.8.2 для последовательных и прямых файлов. Любые дополнительные эффекты, касающиеся текстового ввода-вывода, описаны в подпункте A.10.2.
Исключения, которые могут быть распространены выполнением подпрограммы ввода-вывода, определены в пакете IO_Exceptions; ситуации, в которых они могут быть распространены, описываются после описания подпрограммы (и в разделе A.13). Могут быть распространены исключения Storage_Error и Program_Error. (Program_Error может быть распространен только из-за ошибок, допущенных вызывающей подпрограммой.) Наконец, исключения могут быть распространены в определенных ситуациях, зависящих от реализации.
ПРИМЕЧАНИЯ
18 Каждый экземпляр обобщенных пакетов Sequential_IO и Direct_IO объявляет разный тип File_Type. В случае Text_IO, Wide_Text_IO и Streams.Stream_IO соответствующий тип File_Type является уникальным.
19 Двунаправленное устройство часто можно моделировать как два последовательных файла, связанных с устройством, один из которых имеет режим In_File, а другой - Out_File. Реализация может ограничивать количество файлов, которые могут быть связаны с заданным внешним файлом.