<<
>>

Открытие файла. Системный вызов ореп()

Файловый дескриптор используется в качестве параметра, описывающего поток ввода-вывода, для системных вызовов, выполняющих операции над этим потоком.

Поэтому прежде чем совершать операции чтения данных из файла и записи их в файл, мы должны поместить информацию о файле в таблицу открытых файлов и определить соответствующий файловый дескриптор. Для этого применяется процедура открытия файла, осуществляемая системным вызовом open ().

0_RD0NLY - если над файлом в дальнейшем будут совершаться только операции чтения;

0_WR0NLY - если над файлом в дальнейшем будут осуществляться только операции записи;

0_RDWR - если над файлом будут осуществляться и операции чтения, и операции записи.

Каждое из этих значений может быть скомбинировано посредством операции «побитовое или (|)»с одним или несколькими флагами:

0_CREAT - если файла с указанным именем не существует, он должен быть создан;

0_EXCL - применяется совместно с флагом 0_CREAT.

При совместном их использовании и существовании файла с указанным именем, открытие файла не производится и констатируется ошибочная ситуация;

OJOELAY - запрещает перевод процесса в состояние ь ь при выполнении операции открытия и любых последующих операциях над этим файлом;

0_АРРЕШ - при открытии файла и перед выполнением каждой операции записи (если она, конечно, разрешена) указатель текущей позиции в файле устанавливается на конец файла;

0_ТНШС - если файл существует, уменьшить его размер до 0, с сохранением существующих атрибутов файла, кроме, быть может, времен последнего доступа к файлу и его последней модификации.

Кроме того, в некоторых версиях операционной системы UNIX могут применяться дополнительные значения флагов:

0_SYNC - любая операция записи в файл будет блокироваться (т.

е. процесс будет переведен в состояние L L ) до тех пор, пока записанная информация не будет физически помещена на соответсвующий нижестоящий уровень hardware;

OJJOCTTY - если имя файла относится к терминальному устройству, оно не становится управляющим терминалом процесса, даже если до этого процесс не имел управляющего терминала.

Параметр mode устанавливает атрибуты прав доступа различных категорий пользователей к новому файлу при его создании. Он обязателен, если среди заданных флагов присутствует флаг 0_CREAT, и может быть опущен в противном случае. Этот параметр задается как сумма следующих восьмеричных значений;

0400 - разрешено чтение для пользователя, создавшего файл;

0200 - разрешена запись для пользователя, создавшего файл;

0100 - разрешено исполнение для пользователя, создавшего файл;

0040 - разрешено чтение для группы пользователя, создавшего файл;

0020 - разрешена запись для группы пользователя, создавшего файл;

0010 - разрешено исполнение для группы пользователя, создавшего файл;

0004 - разрешено чтение для всех остальных пользователей;

0002 - разрешена запись для всех остальных пользователей;

1 - разрешено исполнение для всех остальных пользователей.

Системный вызов open () использует набор флагов для того, чтобы специфицировать операции, которые предполагается применять к файлу в дальнейшем или которые должны быть выполнены непосредственно в момент открытия файла. Из всего возможного набора флагов на текущем уровне знаний нас будут интересовать только флаги 0_RD0NLY, 0_WRONLY, 0_RDWR, 0_CREAT и 0_EXCL. Первые три флага являются взаимоисключающими: хотя бы один из них должен быть применен и наличие одного из них не допускает наличия двух других. Эти флаги описывают набор операций, которые, при успешном открытии файла, будут разрешены над файлом в дальнейшем: только чтение, только запись, чтение и запись.

Как вам известно из материалов семинаров 1—2, у каждого файла существуют атрибуты прав доступа для различных категорий пользователей. Если файл с заданным именем существует на диске, и права доступа к нему для пользователя, от имени которого работает текущий процесс, не противоречат запрошенному набору операций, то операционная система сканирует таблицу открытых файлов от ее начала к концу в поисках первого свободного элемента, заполняет его и возвращает индекс этого элемента в качестве файлового дескриптора открытого файла. Если файла на диске нет, не хватает прав или отсутствует свободное место в таблице открытых файлов, то констатируется возникновение ошибки.

В случае, когда мы допускаем, что файл на диске может отсутствовать, и хотим, чтобы он был создан, флаг для набора операций должен использоваться в комбинации с флагом 0_CREAT. Если файл существует, то все происходит по рассмотренному выше сценарию. Если файла нет, сначала выполняется создание файла с набором прав, указанным в параметрах си

стемного вызова. Проверка соответствия набора операций объявленным правам доступа может и не производиться (как, например, в Linux).

В случае, когда мы требуем, чтобы файл на диске отсутствовал и был создан в момент открытия, флаг для набора операций должен использоваться в комбинации с флагами 0_CREAT и 0_EXCL.

Подробнее об операции открытия файла и ее месте среди набора всех файловых операций будет рассказываться на лекции 7 «Файловая система с точки зрения пользователя». Работу системного вызова open () с флагами 0_APPEND и 0_TRUNC мы разберем на семинарах 11—12, посвященных организации файловых систем в UNIX.

<< | >>
Источник: В.Е. Карпов К.А. Коньков. Основы операционных систем. 2005

Еще по теме Открытие файла. Системный вызов ореп():

  1. I. 1. СИСТЕМНЫЙ ПОДХОД КАК ИНСТРУМЕНТ ДЛЯ ПОСТРОЕНИЯ СИСТЕМНЫХ ОПИСАНИЙ
  2. I. СИСТЕМНЫЕ ОПИСАНИЯ - ГЛАВНЫЙ РЕЗУЛЬТАТ СИСТЕМНОГО ПОДХОДА В ПСИХОЛОГИИ
  3. Психология личности целостна, системна (принцип целостности, системности).
  4. ВЫЗОВ ВРАЧА
  5. СПТ откликается на вызов обстоятельств
  6. Быстрый вызов желаемого
  7. Бросьте себе вызов
  8. Самоубийство как вызов обществу
  9. § 14 Условное соглашение. – Предложение и вызов. – Договор посредством публичного торга или состязания. – Одностороннее обещание.
  10. § 46 Принятие наследства. – Значение вызова кредиторов и некоторых публикаций. – Отзыв о принятии и действия, служащие признаком принятия.
  11. ПРИНЦИП СИСТЕМНОСТИ
  12. § 2.4. Системный подход
  13. принцип системности
  14. Тема 1. Основные принципы системного анализа
  15. ГОЛОВОКРУЖЕНИЕ СИСТЕМНОЕ
  16. 2.1.4. Системный анализ
  17. принцип целостности, системности
  18. I. 3. 3. Конструирование системных описаний.