sigevent - структура для уведомления из асинхронных процедур
sigevent(7)
структура для уведомления из асинхронных процедур
ОБЗОР
union sigval { /* Данные, передаваемые с уведомлением */
int sival_int; /* целое */
void *sival_ptr; /* указатель */
};
struct sigevent {
int sigev_notify; /* метод уведомления */
int sigev_signo; /* сигнал уведомления */
union sigval sigev_value; /* данные, передаваемые
с уведомлением */
void (*sigev_notify_function) (union sigval);
/* функция, используемая для нити
notification (SIGEV_THREAD) */
void *sigev_notify_attributes;
/* атрибуты для уведомления нити
(SIGEV_THREAD) */
pid_t sigev_notify_thread_id;
/* ID нити для уведомления (SIGEV_THREAD_ID) */
};
ОПИСАНИЕ
Структура sigevent используется в различных программных интерфейсах для
описания способа, которым нужно уведомлять процесс о событии (например,
окончание асинхронного запроса, истечение таймера или поступление
сообщения).
Определение, приведённое в
ОБЗОРЕ, приблизительно: некоторые поля в
структуре sigevent могут быть определены как часть объединения. Программы
должны использовать только те поля, которые применимы к значению, заданном в
sigev_notify.
В поле sigev_notify задаётся как выполняется уведомление. Значением поля
может быть:
SIGEV_NONE
«Пустое» уведомление: ничего не делать при возникновении события.
SIGEV_SIGNAL
Уведомить процесс, отправив сигнал, указанный в sigev_signo.
Если сигнал пойман обработчиком сигнала, который зарегистрирован с помощью
sigaction(2) с флагом
SA_SIGINFO, то следующим полям назначаются
значения в структуре
siginfo_t, передаваемой во втором аргументе
обработчика:
si_code
В этом поле задаётся значение, которое зависит от программного интерфейса,
доставляющего уведомление.
si_signo
В этом поле указывается номер сигнала (т. е., тоже значение, что и в
sigev_signo).
si_value
В этом поле содержится значение, указанное в
sigev_value.
В зависимости от программного интерфейса остальным полям в структуре
siginfo_t также могут быть присвоены значения.
Эта информация также доступна, если сигнал принимается с помощью
sigwaitinfo(2).
SIGEV_THREAD
Уведомить процесс с помощью вызова sigev_notify_function «как если бы»
это была бы начальная функция новой нити (среди возможностей реализации
здесь может быть: каждое уведомление таймера приводит к созданию новой нити,
или создаётся нить для получения всех уведомлений). Функция вызывается с
единственным аргументом sigev_value. Если sigev_notify_attributes не
равно NULL, то значение должно указывать на структуру pthread_attr_t, в
которой определены атрибуты новой нити (смотрите pthread_attr_init(3)).
SIGEV_THREAD_ID (есть только в Linux)
В настоящее время используется только таймерами POSIX; смотрите
timer_create(2).