int sopen(const char *filename, int access, int shflag, int mode)
Макрос sopen() является частью UNIX-подобной файловой системы. Макрос sopen() открывает файл для совместного доступа при работе в сетях. Он определяется следующим образом:
open(filename,(access | shflag), mode)
Макрос sopen() открывает файл с именем filename и устанавливает режим доступа к нему в соответствии со значением access, а режим совместного использования — в соответствии с shflag. Аргумент access состоит из двух частей: базового режима работы и модификатора. Допускаются следующие базовые режимы работы:
Base | Значение |
---|---|
O_RDONLY | Открыть только для чтения |
O_WRONLY | Открыть только для записи |
O_RDWR | Открыть для чтения и записи |
Выбрав одно из этих значений, можно объединить, используя ИЛИ, с одним или большим количеством следующих модификаторов:
Модификатор | Значение в установленном положении |
---|---|
O_NDELAY | Не используется, включен для совместимости с UNIX |
O_APPEND | Перемещает указатель положения в файле в конец файла перед каждой операцией считывания |
O_CREAT | Если файл не существует, он создается с атрибутами, установленными в соответствии со значением mode |
O_TRUNC | Если файл существует, он урезается до длины 0, но сохраняет свои атрибуты файла O_EXCL При использовании совместно с O_CREAT не будет создавать файл для вывода, если файл с таким именем уже существует |
O_NOINHERIT | Указанный файл не наследуется другими программами |
O_BINARY | Открывает двоичный файл |
O_ТЕХТ | Открывает текстовый файл |
Аргумент shflag определяет вид совместного использования открываемого файла и может принимать одно из следующих значений:
shflag | Значение |
---|---|
SH_COMPAT | Режим совместимости |
SH_DENYRW | Запрет чтения и записи |
SH_DENYWR | Запрет записи |
SH_DENYRD | Запрет чтения |
SH_DENYNONE | Разрешение чтения/записи |
SH_DENYNO | Разрешение чтения/записи |
Аргумент mode нужен только тогда, когда используется модификатор O_CREAT. В этом случае mode может иметь одно из следующих значений:
Mode | Значение |
---|---|
S_IWRITE | Доступ для записи |
S_IREAD | Доступ для чтения |
S_IWRITE | S_IREAD | Доступ для чтения /записи |
При успешном вызове sopen() возвращает положительное целое, являющееся дескриптором открытого файла. Возврат —1 означает, что файл не может быть открыт. В этом случае errno устанавливается в одно из следующих значений:
ENODENT | Файл не существует |
EMFILE | Открыто слишком много файлов |
EACCESS | Доступ запрещен |
EINVACC | Недействительный код доступа |