Jump to content

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Форма языка Perl

[ редактировать ]
open FILEHANDLE,MODE[,EXPR]

например:

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

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

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

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

вызов Открытый стандартизирован спецификацией 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, a и + и возвращает указатель файла, используемый с fgets , fputs и fclose .

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

См. также

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

Примечания

[ редактировать ]
  1. ^ "Связь::Файл" . perldoc.perl.org . Проверено 7 августа 2011 г.
  2. ^ «ЛюбойDBM_файл» . perldoc.perl.org . Проверено 7 августа 2011 г.
  • Продвинутое программирование в среде UNIX, У. Ричард Стивенс ISBN   81-7808-096-6
  • Концепция и применение UNIX, Сумитабх Дас


Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: bc381897517b21323f980c346dbefa6a__1659671880
URL1:https://arc.ask3.ru/arc/aa/bc/6a/bc381897517b21323f980c346dbefa6a.html
Заголовок, (Title) документа по адресу, URL1:
open (system call) - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)