open (системный вызов) - open (system call)

редактировать

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

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

Во время openфайловая система может выделить память для буферов или дождаться первой операции.

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

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

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

Различные другие ошибки, которые могут возникнуть во время открытия, включают сбои обновления каталога, неразрешенные множественные соединения, сбои носителей, сбои канала связи и сбои устройства.

Необходимо всегда проверять возвращаемое значение и предпринимать действия, связанные с ошибкой.

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

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

Содержание
  • 1 аргумент открытого вызова
    • 1.1 Языковая форма Perl
    • 1.2 Определение POSIX библиотеки C
      • 1.2.1 путь
      • 1.2.2 oflag
      • 1.2.3 режим
  • 2 См. Также
  • 3 Примечания
  • 4 Ссылки
аргументы открытого вызова
  1. путь к файлу,
  2. Тип доступа, запрошенного к файлу (чтение, запись, добавление и т. д.),
  3. Первоначальное разрешение файла запрашивается с использованием третьего аргумента, называемого режим. Этот аргумент актуален только при создании нового файла.

После использования файла процесс должен закрыть файл с помощью вызова close, который принимает файловый дескриптор закрываемого файла. Некоторые файловые системы включают расположение, разрешающее выпуск файла.

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

Языковая форма Perl

open FILEHANDLE, MODE [, EXPR]

например:

open (my $ fh, ">", "output.txt");

Perl также использует функцию tieмодуля Tie :: Fileдля связывания массива с файлом. Функция tie :: AnyDBM_Fileсвязывает хеш с файлом.

Определение POSIX библиотеки C

Вызов open стандартизирован Спецификация POSIX для языка C :

int open (const char * path, int oflag,... / *, mode_t mode * /); int openat (int fd, const char * путь, int oflag,...); int creat (const char * путь, режим mode_t); ФАЙЛ * fopen (const char * restrict filename, const char * restrict mode);

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

Open может вернуть −1, указывая на сбой, с errnoс подробным описанием ошибки.

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

путь

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

openatожидает относительный путь.

oflag

Этот аргумент сформирован путем OR'ing вместе дополнительных параметров и (из <fcntl.h >) одного из:

O_RDONLY, O_RDWRи O_WRONLY

Параметры опции включают:

O_APPENDзаписанные данные будут добавлены в конец файла. Операции с файлом всегда будут приводить указатель позиции к концу файла.
O_CREATСоздать файл, если он не существует; в противном случае при открытии не удается установить для errno значение ENOENT.
O_EXCLИспользуется с O_CREAT, если файл уже существует, затем происходит сбой, устанавливая для errno значение EEXIST.
O_TRUNCЕсли файл уже существует, отбросьте его предыдущее содержимое, превратив его в пустой файл. Не применимо для устройства или именованного канала.

Дополнительные флаги и ошибки определены в вызове open.

creat ()реализован как:

int creat (const char * path, mode_t mode) {return open (path, O_WRONLY | O_CREAT | O_TRUNC, mode); }

fopen использует строковые флаги, такие как r, w, aи +, и возвращает указатель файла, используемый с fgets, fputs и fclose.

mode

Необязательный и актуальный только при создании нового файла, определяет права доступа к файлу. К ним относятся чтение, запись или выполнение файла владельцем, группой или всеми пользователями. Режим маскируется вызывающим процессом umask : биты, установленные в umask, очищаются в режиме.

См. Также
Примечания
Ссылки
  • Расширенное программирование в среде UNIX W. Ричард Стивенс ISBN 81-7808-096-6
  • Концепция и приложение UNIX, разработанные Сумитабхом Дасом

.

Последняя правка сделана 2021-06-01 12:38:37
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте