iofunc_ocb_t

Структура блока открытого контекста (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 == 64
off_t offset;
#else
off64_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
#endif
uint16_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 включает в себя следующие элементы:

attr
Указатель на атрибуты OCB. По умолчанию эта структура имеет тип iofunc_attr_t, но можно переопределить макрос IOFUNC_ATTR_T, если в пользовательском менеджере ресурсов требуется использовать другую структуру.
ioflag
Режим (например: чтение, запись, блокировка) с которым был открыт ресурс. Режимы открытия (использованные клиентом в open()) соответствуют значениям ioflag следующим образом:
Режим значение ioflag
O_RDONLY _IO_FLAG_RD
O_RDWR _IO_FLAG_RD | _IO_FLAG_WR
O_WRONLY _IO_FLAG_WR
Эта информация наследуется от структуры io_connect_t из сообщения, переданного обработчику открытия.
offset
offset_hi
Смещение чтения/записи ресурса (например, текущая позиция lseek() в файле), определенное различными способами в соответствии с 32- и 64-разрядными смещениями. Пользовательский менеджер ресурсов может изменять это смещение.
sflag
Режим совместного доступа; см. sopen(). Эта информация наследуется от структуры io_connect_t из сообщения, переданного обработчику открытия.
flags
Бит IOFUNC_OCB_PRIVILEGED устанавливается, если open() выполнен привилегированным процессом (т.е. root). Можно использовать флаги в диапазоне IOFUNC_OCB_FLAGS_PRIVATE (см. <sys/iofunc.h>) для своих собственных целей. Менеджер ресурсов может изменять эти флаги.

Классификация:

ЗОСРВ «Нейтрино»

Тематические ссылки:

iofunc_attr_t, iofunc_ocb_calloc(), iofunc_open_default(), open()




Предыдущий раздел: Описание API системной библиотеки