Организация файлов и средства управления ими
Рис. 18.1. Доступ к элементам файла |
После чтения или записи указатель файла перемещается к следующему элементу и делает его доступным для обработки. Количество элементов в файле не фиксируется. Иными словами, файл имеет переменную длину. Предусмотрены два способа доступа к элементам файла: последовательный и прямой (произвольный). При последовательном доступе элементы файла доступны только в последовательном порядке (от первого к последнему). Таким образом, перед обращением к п+1-му элементу должно произойти обращение к предыдущим п элементам файла. При прямом доступе возможно прямое обращение к любому элементу по его номеру в файле. Различают понятия: внешний файл и внутренний файл. Внешний (физический) файл — это реальный набор данных, существующий во внешней памяти. Внутренний файл — это абстракция, описываемая в программе и обеспечивающая взаимодействие с реальным внешним файлом (рис. 18.2). |
544 |
Глава 18. Ввод-вывод и файлы |
Рис. 18.2. Внешний и внутренний файлы |
Программа пользователя не имеет непосредственного доступа к внешнему файлу. Вся работа с внешними файлами описывается в ней в терминах внутренних файлов. В языке Ада внутренний файл задается как объект файлового типа. Объявление файлового типа находится в стандартных пакетах ввода-вывода и имеет вид: type File_Type is limited private; |
Из этого объявления следует, что внутреннее содержание файловых объектов закрыто для пользователя. К файловым объектам применимы только те операции, которые определены в пакетах ввода-вывода. Для управления файлами используются пять операций. Процедура Create служит для создания и открытия нового внешнего файла, связывания его с внутренним файлом. Процедура Open открывает уже существующий внешний файл и связывает его с внутренним файлом. Процедура Close закрывает внешний файл, разрывая его связь с внутренним файлом. Процедура Delete удаляет внешний файл. Процедура Reset переводит указатель файла в начальную позицию, позволяя возобновить ввод |
или вывод элементов с самого начала. Процедура Create имеет следующую спецификацию: |
где File — имя внутреннего файла, связываемого с создаваемым внешним файлом, Mode — режим работы (допустимы значения: In_File — ввод, Out_File — вывод, InOut_File — ввод-вывод, Append_File — добавление), Name — имя внешнего файла, Form — дополнительные характеристики внешнего файла. Спецификация процедуры Open записывается в виде: |
Организация файлов и средства управления ими |
545 |
Формальные параметры у процедуры Open те же, что и у процедуры Create. Однако параметры Mode и Name не имеют значений по умолчанию. Дело в том, что запрещается открывать уже открытый файл (возникает исключение Status_Error). Если не существует внешнего файла с указанным через Name именем, то генерируется исключение Name_Error (для процедуры Create оно генерируется, если имя внешнего файла недопустимо). Наконец, исключение Use_Error вырабатывается, если операционная среда не поддерживает открытие (или создание) внешнего файла по каким-либо другим причинам (например, на диске нет свободного места).Фактически процедуры создания и открытия готовят внешний файл к сеансу ввода или вывода. Процедура procedure Close ( File : in out File_Type ); завершает сеанс работы с внешним файлом, ее параметром является внутренний файл, связь которого с внешним файлом уничтожается. Если внешний файл не был открыт, то возбуждается исключение Status_Error. Процедура procedure Delete ( File : in out File_Type ); уничтожает внешний файл, связанный с данным внутренним файлом. Процедура Reset имеет две разновидности: procedure Reset ( File : in out File_Type; Mode : in File_Mode ); procedure Reset ( File : in out File_Type ); С ее помощью внешний файл устанавливается в состояние, позволяющее возобновить ввод-вывод с начала файла или добавление в конец файла (для режима Append_File). Если задан параметр Mode, то в соответствии с ним устанавливается новый режим работы файла. Так, если надо создать новый файл, записать в него данные, а затем прочитать их и обработать, то необходимы следующие этапы работы: 1. Выполнение процедуры Create. 2. Запись данных в открытый файл. 3. Выполнение процедуры Reset с заданием режима In_File. 4. Чтение и обработка данных из файла. 5. Закрытие файла с помощью процедуры Close. Для получения информации о внешнем файле определены следующие функции: |
546 |
Глава 18. Ввод-вывод и файлы |
В заключение отметим, что описанные здесь процедуры и функции определены для всех разновидностей файлов Ады. |