Структура сообщения о подключении менеджера ресурсов
struct _io_connect {uint16_t type;uint16_t subtype;uint32_t file_type;uint16_t reply_max;uint16_t entry_max;uint32_t key;uint32_t handle;uint32_t ioflag;uint32_t mode;uint16_t sflag;uint16_t access;uint16_t zero;uint16_t path_len;uint8_t eflag;uint8_t extra_type;uint16_t extra_len;char path[1];};
Структура _io_connect
используется для описания сообщения о подключении, которое получает и отправляет менеджер ресурсов. Включает в себя:
_IO_CONNECT
<sys/ftype.h>
): NULL
). _io_connect_entry
которое менеджер ресурсов готов принять. Если path ссылается на более чем один менеджер ресурсов, то он возвращает список структур _io_connect_entry
указывающих на перекрывающиеся менеджеры ресурсов. O_RDONLY
(0) конвертируется в _IO_FLAG_RD
(0x01) O_WRONLY
(1) конвертируется в _IO_FLAG_WR
(0x02) O_RDWR
(2) конвертируется в _IO_FLAG_RD
| _IO_FLAG_WR
(0x03) _IO_FLAG_RD
для разрешения чтения _IO_FLAG_WR
для разрешения записи O_APPEND
— если установлен, то файловое смещение устанавливается в конец файла перед каждой записью. O_CREAT
— создать новый файл. O_DSYNC
— если установлен, то этот флаг повлияет на последующие вызовы ввода/вывода; Каждый вызов write() будет ожидать пока все данные не будут успешно переданы на устройство хранения так, что они считаются при любом последующем открытии файла (даже если произойдет сбой системы) при условии отсутствии сбоев физического носителя. Если физический носитель имеет кэш-память без сквозной записи, то сбой системы может быть интерпретирован как отказ физического носителя, а данные могут быть нечитаемыми даже если этот флаг установлен и write() возвращает код успешного завершения. O_EXCL
— если O_EXCL
используется совместно с O_CREAT
, то при наличии уже созданного файла, вызов open() завершится ошибкой. Проверка на существование файла и создание файла, если он не существует, является атомарной. Никакой другой процесс не сможет сделать одновременно ту же операцию с тем же самым файлом. Установка бита O_EXCL
без O_CREAT
не дает никакого эффекта. O_LARGEFILE
— позволяет файловому смещению использовать 64
-битное значение. O_NOCTTY
— если установлено, и path ведет к терминальному устройству, функция open() не сделает терминальное устройство контролирующим терминалом для процесса. O_NONBLOCK
— не блокироваться. O_REALIDS
— использовать реальные UID/GID для проверки разрешений. O_RSYNC
— выполняет функции флагов O_SYNC
и O_DSYNC
для операций чтения. O_SYNC
— если установлен, то этот флаг повлияет на последующие вызовы ввода/вывода. Каждый вызов read() или write() завершится, только когда данные будут успешно переданы (считаны или записаны) и вся системная информация файловой системы (в том числе требующаяся для получения этих данных) будет успешно передана, включая время изменения файла и/или время доступа и т.д. См. описание успешной передачи данных с O_DSYNC
выше. O_TRUNC
— Если файл уже существует и является обычным файлом, а режим открытия включает O_RDWR или O_WRONLY, то файл будет обрезан до нулевой длины, режим и владелец останутся без изменений. O_TRUNC
не влияет на FIFO, блок-ориентированные, символьно-ориентированные, специальные файлы и директории. Владелец | Группа | Другие | Разрешения |
---|---|---|---|
S_IRUSR | S_IRGRP | S_IROTH | Чтение |
S_IRWXU | S_IRWXG | S_IRWXO | Чтение, запись, выполнение/поиск. Побитное ИЛИ трех констант. (S_IRWXU это ИЛИ IRUSR , S_IWSUR и S_IXUSR .) |
S_IWUSR | S_IWGRP | S_IWOTH | Запись |
S_IXUSR | S_IXGRP | S_IXOTH | Выполнение/поиск |
Бит | Эквивалент |
---|---|
S_IEXEC | S_IXUSR |
S_IREAD | S_IRUSR |
S_IWRITE | S_IWUSR |
_IO_FLAG_RD
и _IO_FLAG_WR
, которые используются внутренними функциями в качестве разрешений доступа. ЗОСРВ «Нейтрино»
struct _io_connect_ftype_reply, struct _io_connect_link_reply, resmgr_connect_funcs_t
Предыдущий раздел: Описание API системной библиотеки