Открыть файл для общего доступа
#include <unistd.h>#include <fcntl.h>#include <sys/stat.h>#include <sys/types.h>#include <share.h>int sopen( const char *filename,int oflag,int share,... );
<fcntl.h>
): O_CREAT
, открытие провалится (совместное использование флагов позволяет убедиться в том, что создаваемый файл не существует). <share.h>
): O_CREAT
. Объект типа mode_t
, который определяет режим доступа к созданному файлу. Подробнее см. в struct stat.libc
Функция sopen() открывает файл для раздельного доступа. Имя открываемого файла указывается в filename.
Доступ к файлу осуществляется в соответствии с параметром oflag. Если файл не существует, следует указать флаг O_CREAT
.
Режим совместного доступа определяется параметром share. Опциональный аргумент mode опредляет права доступа к созданному файлу (используется, если установлен флаг O_CREAT
).
Функция sopen() применяет маску разрешений к запрашиваемому режиму доступа (см. umask()).
Обратите внимание, что
open( path, oflag, ... );
эквивалентно следующему:
sopen( path, oflag, SH_DENYNO, ... );
Файловый дескриптор. Если возникла ошибка функция возвращает -1
, код ошибки записывается в errno.
O_CREAT
и O_EXCL
и файл уже существует. #include <stdlib.h>#include <sys/stat.h>#include <sys/types.h>#include <fcntl.h>#include <share.h>int main( void ){int filedes;/* open a file for output *//* replace existing file if it exists */filedes = sopen( "file", O_WRONLY | O_CREAT | O_TRUNC, SH_DENYWR,S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP );/* read a file which is assumed to exist */filedes = sopen( "file", O_RDONLY, SH_DENYWR );/* append to the end of an existing file *//* write a new file if file doesn't exist */filedes = sopen( "file", O_WRONLY | O_CREAT | O_APPEND, SH_DENYWR,S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP );return (EXIT_SUCCESS);}
Unix
struct stat, chsize(), close(), creat(), dup(), dup2(), eof(), execl(), execle(), execlp(), execlpe(), execv(), execve(), execvp(), execvpe(), fcntl(), fileno(), fstat(), isatty(), lseek(), open(), read(), stat(), tell(), umask(), write()
Предыдущий раздел: Описание API системной библиотеки