Структура блока открытого контекста (OCB, Open Control Block)
#include <sys/iofunc.h>typedef struct _iofunc_ocb {IOFUNC_ATTR_T *attr;int32_t ioflag;#if !defined(_IOFUNC_OFFSET_BITS) || _IOFUNC_OFFSET_BITS == 64#if _FILE_OFFSET_BITS - 0 == 64off_t offset;#elseoff64_t offset;#endif#elif _IOFUNC_OFFSET_BITS - 0 == 32#if !defined(_FILE_OFFSET_BITS) || _FILE_OFFSET_BITS == 32#if defined(__LITTLEENDIAN__)off_t offset;off_t offset_hi;#elif defined(__BIGENDIAN__)off_t offset_hi;off_t offset;#else#error endian not configured for system#endif#else#if defined(__LITTLEENDIAN__)int32_t offset;int32_t offset_hi;#elif defined(__BIGENDIAN__)int32_t offset_hi;int32_t offset;#else#error endian not configured for system#endif#endif#else#error _IOFUNC_OFFSET_BITS value is unsupported#endifuint16_t sflag;uint16_t flags;void *reserved;} iofunc_ocb_t;
Структура iofunc_ocb_t
представляет собой Блок Открытого Контекста (OCB, Open Control Block), блок данных, который создаётся менеджером ресурсов при открытии ресурса клиентом функцией open().
Менеджер ресурсов создает экземпляр этой структуры всякий раз, когда клиент открывает ресурс. Например, iofunc_open_default() вызывает iofunc_ocb_calloc() для выделения памяти под OCB. OCB существует до тех пор, пока клиент не закроет файловый дескриптор, заполненный при открытии. Менеджер ресурсов передаёт эту структуру всем функциям, реализующим операции ввода-вывода для файлового дескриптора.
Структура iofunc_ocb_t
включает в себя следующие элементы:
IOFUNC_ATTR_T
, если в пользовательском менеджере ресурсов требуется использовать другую структуру. Режим | значение ioflag |
---|---|
O_RDONLY | _IO_FLAG_RD |
O_RDWR | _IO_FLAG_RD | _IO_FLAG_WR |
O_WRONLY | _IO_FLAG_WR |
io_connect_t
из сообщения, переданного обработчику открытия. 32
- и 64
-разрядными смещениями. Пользовательский менеджер ресурсов может изменять это смещение. io_connect_t
из сообщения, переданного обработчику открытия. IOFUNC_OCB_PRIVILEGED
устанавливается, если open() выполнен привилегированным процессом (т.е. root). Можно использовать флаги в диапазоне IOFUNC_OCB_FLAGS_PRIVATE
(см. <sys/iofunc.h>
) для своих собственных целей. Менеджер ресурсов может изменять эти флаги. ЗОСРВ «Нейтрино»
iofunc_attr_t, iofunc_ocb_calloc(), iofunc_open_default(), open()
Предыдущий раздел: Описание API системной библиотеки