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 | Недействительный код доступа |
