Позже мы рассмотрим такие типы данных как блок открытого контекста (OCB), атрибутную запись (attributes structure) и запись точки монтирования (mount structure), которые используются POSIX-уровнем библиотеки.
resmgr_attr_t
Управляющая структура (типа resmgr_attr_t
) передается функции
Управляющая структура (взято из
) содержит следующее:
typedef struct _resmgr_attr {
unsigned
unsigned
unsigned
int (*
} resmgr_attr_t;
other_func
Вообще говоря, использования этого элемента следует избегать. Этот элемент, если не равен NULL, указывает на подпрограмму, которая должна быть вызвана, если принято сообщение, не распознанное библиотекой. Хоть это и можно было бы использовать для реализации «нестандартных» сообщений, но это нехорошая практика (применяйте либо обработчики _IO_DEVCTL, либо _IO_MSG — см. ниже). Если вы хотите обрабатывать входящие импульсы, рекомендую для этого применять функцию
Так что оставьте у этого элемента значение NULL.
Эти два параметра используются для управления размерами областей памяти, используемых при обмене сообщениями.
Параметр resmgr_context_t
— контекстном блоке библиотеки администратора ресурсов, см. ниже). Обычно этот параметр подстраивают, когда некоторые из функций-обработчиков возвращают более чем одноэлементный вектор ввода-вывода (IOV). Отметим, что этот параметр применяется только к исходящим сообщениям на поступающие сообщения не влияет.
Параметр resmgr_context_t
», см. ниже).
flags
Этот параметр дает библиотеке администратора ресурсов дополнительную информацию. В нашем случае мы передадим просто нуль (0). Другие значения этого параметра можно найти в справочном руководстве по Си-библиотеке, в разделе, посвященном функции
resmgr_connect_funcs_t
Когда библиотека администратора ресурсов принимает сообщение, она проверяет тип сообщения и смотрит, что можно сделать. Базовый уровень библиотеки содержит две таблицы, которые определяют это поведение. Это таблица типа resmgr_connect_funcs_t
, которая содержит список обработчиков сообщений установления соединения, а также таблица типа геsmgr_io_funсs_t
, которая содержит аналогичный список обработчиков сообщений ввода/вывода — ее мы рассмотрим несколько позже.
Когда придет время заполнить таблицы функций установления соединения и ввода/вывода, рекомендуется сначала воспользоваться функцией
):
typedef struct _resmgr_connect_funcs {
unsigned nfuncs;
int (*open)(ctp, io_open_t *msg, handle, void *extra);
int (*unlink)(ctp, io_unlink_t *msg, handle,
void *reserved);
int (*rename)(ctp, io_rename_t *msg, handle,
io_rename_extra_t *extra);
int (*mknod)(ctp, io_mknod_t *msg, handle,
void *reserved);
int (*readlink)(ctp, io_readlink_t *msg, handle,
void *reserved);
int (*link)(ctp, io_link_t *msg, handle,
io_link_extra_t *extra);