resmgr_open_bind()

Связать блок открытого контекста с открытым запросом

Прототип:

#include <sys/resmgr.h>
int resmgr_open_bind( resmgr_context_t *ctp,
void *ocb,
const resmgr_io_funcs_t *iofuncs );

Аргументы:

ctp
Указатель на структуру resmgr_context_t, которую библиотека менеджера ресурсов использует для передачи контекстной информации между функциями.
ocb
Указатель на блок открытого контекста (OCB, Open Control Block), который требуется привязать к открытому запросу. OCB обычно представляет собой структуру типа iofunc_ocb_t, однако можно определить и собственную.
iofuncs
Указатель на структуру resmgr_io_funcs_t, которая определяет функции ввода-вывода менеджера ресурсов.

Библиотека:

libc

Описание:

Функция resmgr_open_bind() - это вызов самого нижнего уровня в библиотеке менеджера ресурсов, используемый для обработки открытых сообщений. Функция связывает блок открытого контекста (OCB, Open Control Block) с процессом, идентифицированным полями id и info в ctp.


Note: Необходимо использовать данную функцию как часть обработки сообщения _IO_OPEN. На практике эта функция, как правило, не вызывается напрямую; обычно используется iofunc_open_default() или iofunc_ocb_attach(). (Функция iofunc_open_default() вызывает iofunc_ocb_attach(), которая, в свою очередь, вызывает resmgr_open_bind()).

Выделяется внутренняя структура данных, которая поддерживает некоторое количество ссылок на OCB. В файловом дескрипторе при вызове dup() счетчик ссылок увеличивается, а при close() - уменьшается. Когда счетчик достигает нуля, вызывается close_ocb(), указанная в io_funcs.

В наиболее общем случае OCB - это произвольная структура, которую определяет программист, которая может содержать информацию, описывающую открытый файл, или просто int для удержания открытого режима для проверки в read() и write().

Однако, в типичном случае, OCB представляет собой структуру, которая содержит по крайней мере элементы, определенные в typedef iofunc_ocb_t. Этот typedef определяет общую структуру OCB, которая затем может использоваться вспомогательными функциями уровня POSIX (все функции, начинающиеся с имени iofunc_*). Преимущество этого подхода заключается в том, что менеджер ресурсов получает поведение POSIX без какой-либо дополнительной работы со стороны программиста.

Аргумент attr для open() также обычно сохраняется в OCB. Четко определенный iofunc_ocb_t имеет поле с именем attr, которому необходимо присвоить значение аргумента attr. Это позволяет вспомогательным функциям POSIX получать доступ к информации о текущем открытом сеансе (которая хранится в OCB), а также к информации о самом устройстве (которая хранится в структуре атрибутов, ocb->attr).

Возвращаемое значение:

0
Успешное завершение.
-1
Возникла ошибка. Код ошибки записан в errno.

Коды ошибок:

EINVAL
Поля id и/или info структуры ctp некорректны.
ENOMEM
Недостаточно памяти для размещения внутренней структуры данных.

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

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

Безопасность использования
Точка остановки потока
Нет
Обработчик прерываний
Нет
Обработчик сигналов
Нет
В потоке
Да

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

iofunc_ocb_attach(), iofunc_ocb_t, iofunc_open_default(), resmgr_context_t, resmgr_io_funcs_t, resmgr_unbind()




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