sigevent -
структура
для
уведомления
из
асинхронных
процедур
#include <signal.h>
union sigval { /* Data passed with notification */
int sival_int; /* Integer value */
void *sival_ptr; /* Pointer value */
};
struct sigevent {
int sigev_notify; /* Notification method */
int sigev_signo; /* Notification signal */
union sigval sigev_value;
/* Data passed with notification */
void (*sigev_notify_function)(union sigval);
/* Function used for thread
notification (SIGEV_THREAD) */
void *sigev_notify_attributes;
/* Attributes for notification thread
(SIGEV_THREAD) */
pid_t sigev_notify_thread_id;
/* ID of thread to signal
(SIGEV_THREAD_ID); Linux-specific */
};
Структура
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).
timer_create(2),
aio_fsync(3),
aio_read(3),
aio_write(3),
getaddrinfo_a(3),
lio_listio(3),
mq_notify(3),
aio(7),
pthreads(7)
Русский
перевод
этой
страницы
руководства
был сделан
Alexander Golubev <
[email protected]>, Azamat Hackimov
<
[email protected]>, Hotellook, Nikita
<
[email protected]>, Spiros Georgaras <
[email protected]>, Vladislav
<
[email protected]>, Yuri Kozlov <
[email protected]>
и Иван
Павлов <
[email protected]>
Этот
перевод
является
бесплатной
документацией;
прочитайте
Стандартную
общественную
лицензию GNU
версии 3
или более
позднюю,
чтобы
узнать об
условиях
авторского
права. Мы не
несем
НИКАКОЙ
ОТВЕТСТВЕННОСТИ.
Если вы
обнаружите
ошибки в
переводе
этой
страницы
руководства,
пожалуйста,
отправьте
электронное
письмо на
[email protected]