Подключение файлового дескриптора к менеджеру ресурсов
#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 системной библиотеки