select_attach()

Подключение файлового дескриптора к менеджеру ресурсов

Прототип:

#include <sys/iofunc.h>
#include <sys/dispatch.h>
int select_attach( void *dpp,
select_attr_t *attr,
int fd,
unsigned flags,
int (*func)( select_context_t *ctp,
int fd,
unsigned flags,
void *handle ),
void *handle );

Аргументы:

dpp
Дескриптор диспетчера, созданный с помощью dispatch_create(),
attr
Указатель на структуру select_attr_t.
fd
Файловый дескриптор, который необходимо прикрепить к дескриптору диспетчера.
flags
Досупные флаги определены в <sys/dispatch.h> и используют механизмы ionotify() (дополнительные сведения см. в разделе ionotify()):
SELECT_FLAG_EXCEPT
Out-of-band данные доступны. Определение подобных данных зависит от конкретного менеджера ресурсов.
SELECT_FLAG_READ
Входные данные доступны. Количество доступных данных по умолчанию равно 1. Для символьных устройств это соответствует одному символу. Для очереди POSIX-сообщений это соответствует одному сообщению. Конкретные менеджеры ресурсов выбирают подходящий вид объектов.
SELECT_FLAG_WRITE
В выходном буфере имеется место для дополнительных данных. Фактическое количество свободного места зависит от менеджера ресурсов. Менеджеры ресурсов могут уведомлять как о полном опустошении выходного буфера, так и о наличии некоторого места в нем.

Флаги, специфичные для диспетчера:
SELECT_FLAG_REARM
Перезапуск fd после передачи события (event).
SELECT_FLAG_SRVEXCEPT
Регистрация функции, которая будет вызываться при завершении любого канала с активными соединениями. При использовании этого флага используется флаг _TO_CHF_COLD_DISCONNECT функции ChannelCreate(). В этом случае fd игнорируется.
func
Функция-обработчик, которая будет вызвана после разблокировки дескриптора.
handle
Указатель на данные, которые необходимо передать в func.

Библиотека:

libc

Описание:

Функция select_attach() присоединяет файловый дескриптор fd к дескриптору диспетчера dpp и устанавливает заданные флаги flags. Когда fd разблокируется, функция func вызывается с аргументом handle.

Обработчик

Аргумент func – это предоставляемая пользователем функция, которая будет вызвана при возникновении события, ассоциированного с fd. Она функция должна возвращать 0, остальные значения зарезервированы. Функции передаются следующие аргументы:

ctp
Указатель на контекст.
fd
Файловый дескриптор fd с которым связано произошедшее событие.
flags
Тип произошедшего события. Возможные флаги flags:
SELECT_FLAG_EXCEPT
SELECT_FLAG_READ
SELECT_FLAG_WRITE
handle
Указатель на данные функции-обработчика.

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

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

Коды ошибок:

EINVAL
Неправильный аргумент.
ENOMEM
Недостаточно памяти.

Примеры:

Пример с select_attach() см. в разделе dispatch_create(). Другие примеры с использованием интерфейсов диспетчера см. на страницах описания message_attach(), resmgr_attach() и thread_pool_create().

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

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

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

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

select_attr_t, select_detach(), select_query()




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