Связать блок открытого контекста с открытым запросом
#include <sys/resmgr.h>int resmgr_open_bind( resmgr_context_t *ctp,void *ocb,const resmgr_io_funcs_t *iofuncs );
libc
Функция resmgr_open_bind() - это вызов самого нижнего уровня в библиотеке менеджера ресурсов, используемый для обработки открытых сообщений. Функция связывает блок открытого контекста (OCB, Open Control Block) с процессом, идентифицированным полями id и info в ctp.
Необходимо использовать данную функцию как часть обработки сообщения _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).
ЗОСРВ «Нейтрино»
iofunc_ocb_attach(), iofunc_ocb_t, iofunc_open_default(), resmgr_context_t, resmgr_io_funcs_t, resmgr_unbind()
Предыдущий раздел: Описание API системной библиотеки