Открытие файлов в файловых системах: системный вызов open, файловые дескрипторы, одновременный доступ, независимость операций. Основы работы с файлами.
Сравнивайте с английским: нажмите на абзац — оригинал откроется в окне. Кнопка EN под абзацем показывает его прямо в тексте.
Введение
Для большинства файловых систем программа инициализирует доступ к файлу в файловой системе с помощью системного вызова `open`. Это выделяет ресурсы, связанные с файлом (дескриптор файла), и возвращает дескриптор, который процесс будет использовать для обращения к этому файлу. В некоторых случаях операция `open` выполняется при первом доступе. Один и тот же файл может быть открыт одновременно несколькими процессами и даже одним и тем же процессом, что приводит к появлению нескольких дескрипторов для одного и того же файла, в зависимости от организации файлов и файловой системы. Операции с дескрипторами, такие как перемещение указателя файла или его закрытие, независимы и не влияют на другие дескрипторы того же файла. Операции над файлом, например запись, видны операциям с другими дескрипторами: последующее чтение может прочитать только что записанные данные. Во время `open` файловая система может выделить память для буферов или отложить выделение до первой операции. Разрешается абсолютный путь к файлу. Это может включать подключение к удаленному хосту и уведомление оператора о необходимости съемного носителя, а также инициализацию коммуникационного устройства. В этом случае может быть возвращена ошибка, если хост или носитель недоступны. Выполняется первый доступ как минимум к каталогу в файловой системе. Обычно возвращается ошибка, если компоненты более высокого уровня пути (каталоги) не могут быть найдены или к ним нет доступа. Ошибка возвращается, если файл должен существовать, но его нет, или если файл не должен существовать, но он существует. Если файл должен существовать и существует, доступ к файлу, ограниченный флагами разрешений в метаданных файла или списке контроля доступа, проверяется на соответствие запрошенному типу операций. Обычно это требует дополнительного доступа к файловой системе, хотя в некоторых файловых системах метафлаги могут быть частью структуры каталога. Если файл создается, файловая система может выделить объем хранилища по умолчанию или указанный объем, в зависимости от возможностей файловой системы. В случае неудачи возвращается ошибка. Обновление каталога новой записью может быть выполнено сразу или отложено до закрытия файла. Другие возможные ошибки при `open` включают сбои обновления каталога, запрет множественных подключений, сбои носителей, сбои в коммуникационных каналах и сбои устройств. Возвращаемое значение всегда необходимо проверять и предпринимать действия, специфичные для данной ошибки. Во многих случаях, при открытии файла с помощью библиотечной функции времени выполнения языка программирования, могут выполняться дополнительные действия, включая инициализацию структуры библиотеки времени выполнения, связанной с файлом. Как только файл больше не нужен, программа должна его закрыть. Это приведет к обновлению буферов библиотеки времени выполнения и файловой системы на физический носитель и позволит другим процессам получить доступ к данным, если требовалось исключительное использование. Некоторые библиотеки времени выполнения могут закрыть файл, если программа вызывает выход из среды выполнения. Некоторые файловые системы могут выполнить необходимые операции при завершении программы. Ни одно из этих событий не произойдет в случае сбоя ядра или отключения питания. Это может привести к повреждению структуры файловой системы, требующему запуска привилегированных и длительных утилит файловой системы, во время которых вся файловая система может быть недоступна.
For most file systems, a program initializes access to a file in a file system using the open system call. This allocates resources associated to the file (the file descriptor), and returns a handle that the process will use to refer to that file. In some cases the open is performed by the first access. The same file may be opened simultaneously by several processes, and even by the same process, resulting in several file descriptors for the same file; depending on the file organization and filesystem. Operations on the descriptors such as moving the file pointer or closing it are independentthey do not affect other descriptors for the same file. Operations on the file, such as a write, can be seen by operations on the other descriptors: a later read can read the newly written data. During the open, the filesystem may allocate memory for buffers, or it may wait until the first operation. The absolute file path is resolved. This may include connecting to a remote host and notifying an operator that a removable medium is required. It may include the initialization of a communication device. At this point an error may be returned if the host or medium is not available. The first access to at least the directory within the filesystem is performed. An error will usually be returned if the higher level components of the path (directories) cannot be located or accessed. An error will be returned if the file is expected to exist and it does not or if the file should not already exist and it does. If the file is expected to exist and it does, the file access, as restricted by permission flags within the file meta data or access control list, is validated against the requested type of operations. This usually requires an additional filesystem access although in some filesystems meta flags may be part of the directory structure. If the file is being created, the filesystem may allocate the default initial amount of storage or a specified amount depending on the file system capabilities. If this fails an error will be returned. Updating the directory with the new entry may be performed or it may be delayed until the close is performed. Various other errors which may occur during the open include directory update failures, un permitted multiple connections, media failures, communication link failures and device failures. The return value must always be examined and an error specific action taken. In many cases programming language specific run time library opens may perform additional actions including initializing a run time library structure related to the file. As soon as a file is no longer needed, the program should close it. This will cause run time library and filesystem buffers to be updated to the physical media and permit other processes to access the data if exclusive use had been required. Some run time libraries may close a file if the program calls the run time exit. Some filesystems may perform the necessary operations if the program terminates. Neither of these is likely to take place in the event of a kernel or power failure. This can cause damaged filesystem structures requiring the running of privileged and lengthy filesystem utilities during which the entire filesystem may be inaccessible.
путь
Имя файла для открытия. Оно включает в себя путь к файлу, определяющий, где и в какой файловой системе файл находится (или должен быть создан). Функция openat ожидает относительный путь.
The name of the file to open. It includes the file path defining where, in which file system, the file is found (or should be created). openat expects a relative path.