Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
VSOS_2014.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
1.9 Mб
Скачать
    1. Операции над файлами

Файл можно рассматривать как абстрактный тип данных. Чтобы его определить должным образом, необходимо продумать операции, которые можно проделывать с файлами. Операционные системы предоставляют шесть базовых операций, которые выполняются с помощью соответствующих системных вызовов:

  • Создание файла (creating a file). Для создания файла требуется выполнение двух шагов:

  1. в файловой системе должно быть найдено свободное пространство для нового файла;

  2. в соответствующем каталоге создается точка входа (регистрационная запись) для нового файла. Она должна содержать имя файла и информацию о расположении файла в файловой системе.

  • Запись файла (writing a file). Для записи файла системному вызову передаются имя файла и информация, записываемая в файл. Получив имя файла, система просматривает каталог, чтобы узнать расположение файла. Система может поддерживать специальный указатель записи, чтобы сохранять позицию, в которую нужно будет писать при следующей записи.

  • Чтение из файла (reading a file). Для чтения файла используется системный вызов, параметрами которого являются имя файла и указатель на место в основной памяти, куда должна быть помещена прочитанная из файла информация. Действует этот системный вызов аналогично предыдущему. Система может поддерживать специальный указатель чтения. Поскольку, вообще говоря, операции чтения и записи могут чередоваться, большинство систем поддерживает текущий указатель позиции в файле (current file position pointer).

  • Позиционирование (reposition within a file). Текущий указатель устанавливается в соответствии с полученным значением. Эта операция не требует выполнения ввода-вывода

  • Удаление файла (deleting a file). Подразумевает не «стирание» информации, хранящейся в файле, освобождение пространства, занимаемое данным файлом, для дальнейшего использования другими файлами и уничтожение соответствующей записи в каталоге.

  • Усечение файла (truncate). Иногда необходимо, оставив неизмененными атрибуты файла, удалить его содержимое. Вместо того, чтобы удалять файл и создавать его заново, можно просто установить его длину, равной нулю.

Эти шесть операций образуют минимальный набор операций, требующихся для работы с файлами. Могут быть предусмотрены и другие операции, например, переименование файла (renaming a file) или добавление информации в конец существующего файла (append). Как правило, они могут быть реализованы в виде комбинации выражены через базовые операции. Например, операция копирования (copy) может быть выполнена путем создания нового файла и последующей записи в него содержимого существующего файла.

Нужно также иметь операции, которые позволяют получать значения атрибутов файла и переустанавливать их.

Большинство операций с файлами, как мы видели, включает поиск в каталоге точки входа, ассоциированной с файлом. Чтобы избежать одинаковых действий, большинство ОС предусматривают операцию открытия файла (opening a file). Для этого операционная система поддерживает таблицу, содержащую информацию об открытых файлах. Такая таблица называется таблицей открытых файлов (open – file table). Открытие файла сводится к занесению данных о нем в таблицу и возврату номера строки (индекса) в таблице. Другие файловые операции используют этот индекс и, в результате, не производится никакого поиска. Когда файл больше не нужен, процесс может его закрыть, в этом случае запись из таблицы будет удалена.

Некоторые системы неявно открывают файл при первой ссылке на нее. В большинстве операционных систем требуется явное выполнение операции открытия файла до первого доступа к данным при помощи соответствующего системного вызова (open). Этот системный вызов ищет в каталоге соответствующую точку входа, копирует ее в таблицу открытых файлов, добавляя информацию о правах доступа. Обычно cистемный вызов open возвращает указатель на точку входа в таблицу открытых файлов. Этот указатель (дескриптор файла) используется в операциях ввода-вывода, сокращая их выполнение и упрощая интерфейс.

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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]