stringtranslate.com

открыть (системный вызов)

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

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

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

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

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

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

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

Всегда необходимо проверять возвращаемое значение и предпринимать соответствующие действия в случае возникновения ошибки.

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

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

аргументы открытого вызова

  1. Путь к файлу,
  2. Тип запрошенного доступа к файлу (чтение, запись, добавление и т. д.),
  3. Начальное разрешение файла запрашивается с помощью третьего аргумента, называемого mode. Этот аргумент имеет значение только при создании нового файла.

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

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

Форма языка Perl

открыть FILEHANDLE , MODE [, EXPR ] 

например:

открыть ( мой $fh , ">" , "output.txt" );   

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

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

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

int open ( const char * path , int oflag , ... /*,mode_t mode */ ); int openat ( int fd , const char * path , int oflag , ...); int creat ( const char * path , mode_t mode ); FILE * fopen ( const char * restrict filename , const char * restrict mode );                           

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

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

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

путь

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

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

офлаг

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

O_RDONLY, O_RDWRиO_WRONLY

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

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

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

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

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

режим

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

Смотрите также

Примечания

  1. ^ "Tie::File". perldoc.perl.org . Получено 2011-08-07 .
  2. ^ "AnyDBM_File". perldoc.perl.org . Получено 2011-08-07 .

Ссылки