Введение

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

путь

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