Открытие файла

Для начала работы с файлом его необходимо открыть. Для этого существует специальный системный вызов open:

#include <sys/types.h>

#include <sys/stat.h>

#include <fentl.h>

int open(const char *name, int flags);

int open(const char *name, int flags, mode_l mode);

Данный системный вызов использует первый параметр name как полный путь к файлу и сопоставляет с этим именем дескриптор файла, который возвращается при успешном завершении операции. Позиция в файле устанавливается в 0, а разрешение на доступ к файлу определяется вторым параметром flags. Он может принимать следующие значения:

O_RDONLY – только для чтения

O_WRONLY – только для записи

O_RDWR – и чтение, и запись

Пример использования системного вызова с проверкой:

int fd;

fd=open(“/home/stud/file1”,O_RDONLY);

if (fd==-1)

{ //обработка ошибки }

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

Также есть и дополнительные флаги, которые могут присоединяться операцией ИЛИ с основными:

O_APPEND – файл открыт в режиме присоединения, перед каждой записью указатель позиции устанавливается в конец файла;

O_CREAT – если файл name не существует, то он создается, если же файл существует и помимо CREAT используется EXCL, то open завершается с ошибкой (возвращается -1);

O_EXCL – этот флаг совместно с CREAT используется для предотвращения повторного создания файла;

O_SYNC – файл открывается для синхронного ввода/вывода, при этом ни одна операция записи не будет завершена, пока данные физически не будут записаны на диск;

O_NONBLOCK – файл открывается в режиме без блокировки, если это возможно. Т.е. ни вызов open, ни любые другие вызовы не приводят к блокировке (засыпанию) процесса во время ввода-вывода. Флаг определен только для конвейеров FIFO;

O_TRUNC – при использовании этого флага, если файл существует и это обычный файл, он усекается до нулевой длины, запись в него допускается.

Примером использования системного вызова open с некоторыми из выше перечисленных флагов:

fd=open(“/home/stud/file.rot”, O_WRONLY|O_TRUNC);

Владельцем нового файла становится владелец EUID процесса, создавшего файл.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: