Для большинства файловых систем программа инициализирует доступ к файлу в файловой системе с помощью системного вызова open . Это выделяет ресурсы, связанные с файлом ( дескриптор файла ), и возвращает дескриптор , который процесс будет использовать для ссылки на этот файл. В некоторых случаях открытие выполняется первым доступом.
Один и тот же файл может быть открыт одновременно несколькими процессами и даже одним и тем же процессом, что приводит к нескольким файловым дескрипторам для одного и того же файла; в зависимости от организации файла и файловой системы. Операции над дескрипторами, такие как перемещение указателя файла или его закрытие, независимы — они не влияют на другие дескрипторы для того же файла. Операции над файлом, такие как запись , можно увидеть по операциям над другими дескрипторами: более позднее чтение может прочитать вновь записанные данные.
Во время этого open
файловая система может выделять память для буферов или может ждать до первой операции.
Абсолютный путь к файлу разрешен. Это может включать подключение к удаленному хосту и уведомление оператора о том, что требуется съемный носитель. Это может включать инициализацию устройства связи. На этом этапе может быть возвращена ошибка, если хост или носитель недоступны. Выполняется первый доступ по крайней мере к каталогу в файловой системе. Обычно возвращается ошибка, если компоненты более высокого уровня пути ( каталоги ) не могут быть найдены или к ним не может быть получен доступ. Ошибка возвращается, если ожидается, что файл существует, но его нет, или если файл не должен существовать, но он существует.
Если ожидается, что файл существует и он существует, доступ к файлу, ограниченный флагами разрешений в метаданных файла или списке контроля доступа , проверяется на соответствие запрошенному типу операций. Обычно для этого требуется дополнительный доступ к файловой системе, хотя в некоторых файловых системах метафлаги могут быть частью структуры каталогов.
Если файл создается, файловая система может выделить начальный объем хранилища по умолчанию или указанный объем в зависимости от возможностей файловой системы. Если это не удается, возвращается ошибка. Обновление каталога новой записью может быть выполнено или отложено до выполнения закрытия .
Другие ошибки, которые могут возникнуть во время открытия, включают сбои обновления каталога, неразрешенные множественные подключения, сбои носителей, сбои канала связи и сбои устройств.
Всегда необходимо проверять возвращаемое значение и предпринимать соответствующие действия в случае возникновения ошибки.
Во многих случаях открытие библиотеки времени выполнения, специфичной для языка программирования, может выполнять дополнительные действия, включая инициализацию структуры библиотеки времени выполнения, связанной с файлом.
Как только файл больше не нужен, программа должна закрыть его. Это приведет к обновлению библиотеки времени выполнения и буферов файловой системы на физическом носителе и позволит другим процессам получить доступ к данным, если требовалось исключительное использование. Некоторые библиотеки времени выполнения могут закрыть файл, если программа вызывает выход из времени выполнения. Некоторые файловые системы могут выполнить необходимые операции, если программа завершается. Ни одно из этих действий, скорее всего, не произойдет в случае сбоя ядра или питания. Это может привести к повреждению структур файловой системы, требующему запуска привилегированных и длительных утилит файловой системы, во время которых вся файловая система может быть недоступна.
mode
. Этот аргумент имеет значение только при создании нового файла.После использования файла процесс должен закрыть файл с помощью вызова close , который принимает дескриптор файла, который нужно закрыть. Некоторые файловые системы включают в себя диспозицию, разрешающую освобождение файла.
Некоторые компьютерные языки включают библиотеки времени выполнения, которые включают дополнительную функциональность для определенных файловых систем. Открытая (или некоторая вспомогательная процедура) может включать спецификации для размера ключа, размера записи, скорости соединения. Некоторые открытые процедуры включают спецификацию программного кода, который должен быть выполнен в случае ошибки.
открыть FILEHANDLE , MODE [, EXPR ]
например:
открыть ( мой $fh , ">" , "output.txt" );
Perl также использует tie
функцию модуля Tie::File
для связывания массива с файлом. [1] Функция tie::AnyDBM_File
связывает хэш с файлом. [2]
Открытый вызов стандартизирован спецификацией 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
Параметры опции включают в себя:
O_APPEND
Записанные данные будут добавлены в конец файла. Файловые операции всегда будут корректировать указатель позиции в конец файла.O_CREAT
Создайте файл, если он не существует; в противном случае открытие файла завершится ошибкой, установив errno в значение ENOENT.O_EXCL
Используется, O_CREAT
если файл уже существует, то происходит сбой, и errno устанавливается в значение EEXIST.O_TRUNC
Если файл уже существует, то отбросить его предыдущее содержимое, сделав его пустым файлом. Неприменимо для устройства или именованного канала.Дополнительные флаги и ошибки определяются в открытом вызове.
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, очищаются в режиме.
open