Открытие файла. Системный вызов ореп()
Файловый дескриптор используется в качестве параметра, описывающего поток ввода-вывода, для системных вызовов, выполняющих операции над этим потоком.
Поэтому прежде чем совершать операции чтения данных из файла и записи их в файл, мы должны поместить информацию о файле в таблицу открытых файлов и определить соответствующий файловый дескриптор. Для этого применяется процедура открытия файла, осуществляемая системным вызовом 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.
Еще по теме Открытие файла. Системный вызов ореп():
- I. 1. СИСТЕМНЫЙ ПОДХОД КАК ИНСТРУМЕНТ ДЛЯ ПОСТРОЕНИЯ СИСТЕМНЫХ ОПИСАНИЙ
- I. СИСТЕМНЫЕ ОПИСАНИЯ - ГЛАВНЫЙ РЕЗУЛЬТАТ СИСТЕМНОГО ПОДХОДА В ПСИХОЛОГИИ
- Психология личности целостна, системна (принцип целостности, системности).
- ВЫЗОВ ВРАЧА
- СПТ откликается на вызов обстоятельств
- Быстрый вызов желаемого
- Бросьте себе вызов
- Самоубийство как вызов обществу
- § 14 Условное соглашение. – Предложение и вызов. – Договор посредством публичного торга или состязания. – Одностороннее обещание.
- § 46 Принятие наследства. – Значение вызова кредиторов и некоторых публикаций. – Отзыв о принятии и действия, служащие признаком принятия.
- ПРИНЦИП СИСТЕМНОСТИ
- § 2.4. Системный подход
- принцип системности
- Тема 1. Основные принципы системного анализа
- ГОЛОВОКРУЖЕНИЕ СИСТЕМНОЕ
- 2.1.4. Системный анализ
- принцип целостности, системности
- I. 3. 3. Конструирование системных описаний.