Выбрать главу

typedef union {

 struct _io_msg i;

} io_msg_t;

Описание: Интерфейс _IO_MSG является более общей, но менее переносимой вариацией на тему ioctl() и devctl(). Поле mgrid идентифицирует конкретный администратор — вы не должны выполнять никаких действий по запросам, не соответствующим идентификатору вашего администратора. Поле subtype фактически задает команду, которую клиент хочет выполнить. Любые неявно передаваемые данные следуют за входной структурой. Данные, возвращаемые клиенту, передаются сами по себе; код завершения возвращается через макрос _RESMGR_STATUS. Уникальный «идентификатор администратора» (manager ID) вы можете получить в QSSL.

Возвращает: Код завершения, при помощи вспомогательного макроса _RESMGR_STATUS.

io_notify()

int io_notify(resmgr_context_t *ctp, io_notify_t *msg,

 RESMGR_OCB_T *ocb)

Классификация: Функция ввода/вывода

Обработчик по умолчанию: Нет

Вспомогательные функции: iofunc_notify(), iofunc_notify_remove(), iofunc_notify_trigger()

Клиентская функция: select(), ionotify()

Сообщения: _IO_NOTIFY

Структура данных:

struct _io_notify {

 uint16_t        type;

 uint16_t        combine_len;

 int32_t         action;

 int32_t         flags;

 struct sigevent event;

};

struct _io_notify_reply {

 uint32_t zero;

 uint32_t flags;

};

typedef union {

 struct _io_notify       i;

 struct _io_notify_reply o;

} io_notify_t;

Описание: Данный обработчик отвечает за установку, опрос или удаление обработчика уведомлений. Параметры action (действие) и flags (флаги) определяют тип операции уведомления и условия; параметр event (событие) является структурой типа struct sigevent, которая определяет событие уведомления (если оно есть), которое клиент хочет получить. Событие event клиенту доставляется функцией MsgDeliverEvent() или функцией iofunc_notify_trigger().

Возвращает: Код завершения, при помощи вспомогательного макроса _RESMGR_STATUS; флаги возвращается ответным сообщением.

io_open()

int io_open(resmgr_context_t *ctp, io_open_t *msg,

 RESMGR_HANDLE_T *handle, void *extra)

Классификация: Функция установления соединения

Обработчик по умолчанию: iofunc_open_default()

Вспомогательные функции: iofunc_open(), iofunc_ocb_attach()

Клиентская функция: open(), fopen(), sopen() и др.

Сообщения: _IO_CONNECT, подтипы _IO_CONNECT_COMBINE, _IO_CONNECT_COMBINE_CLOSE и _IO_CONNECT_OPEN.

Структура данных:

struct _io_connect {

 // Внутренние поля (как описано выше)

 uint16_t path_len;

 uint8_t  extra_type;

 uint16_t extra_len;

 char     path[1];

};

struct _io_connect_link_reply {

 uint32_t reserved1[2];

 uint8_t  eflag;

 uint8_t  reserved2[3];

 uint32_t umask;

 uint16_t nentries;

 uint16_t path_len;

};

typedef union {

 struct _io_connect            connect;

 struct _io_connect_link_reply link_reply;

} io_open_t;

Описание: Это основная точка входа в администратор ресурсов. Она выполняет проверку, действительно ли клиент имеет соответствующие права на открытие файла, привязывает OCB к внутренним структурам библиотеки (посредством функций resmgr_bind_ocb() или iofunc_ocb_attach()) и возвращает errno. Отметим, что для данной функции релевантны не все поля структур ввода и вывода.

Возвращает: Код завершения, при помощи вспомогательного макроса _IO_SET_CONNECT_RET.

io_openfd()

int io_openfd(resmgx_context_t *ctp, io_openfd_t *msg,

 RESMGR_OCB_T *ocb)

Классификация: Функция ввода/вывода

Обработчик по умолчанию: iofunc_openfd_default()

Вспомогательные функции: iofunc_openfd()

Клиентская функция: openfd()

Сообщения: _IO_OPENFD

Структура данных:

struct _io_openfd {

 uint16_t         type;

 uint16_t         combine_len;

 uint32_t         ioflag;

 uint16_t         sflag;

 uint16_t         reserved1;

 struct _msg_info info;

 uint32_t         reserved2;

 uint32_t         key;

};

typedef union {

 struct _io_openfd i;

} io_openfd_t;

Описание: Данная функция аналогична предоставляемому обработчику io_open() — за исключением того, что вместо имени пути передается дескриптор уже открытого файла (в силу передачи вам параметра ocb в вызове функции).

Возвращает: Код завершения, при помощи вспомогательного макроса _RESMGR_STATUS.

io_pathconf()

int io_pathconf(resmgr_context_t *ctp, io_pathconf_t *msg,