Scroll to navigation

sigevent(7) Miscellaneous Information Manual sigevent(7)

ИМЯ

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_signo.
Если сигнал пойман обработчиком сигнала, который зарегистрирован с помощью sigaction(2) с флагом SA_SIGINFO, то следующим полям назначаются значения в структуре siginfo_t, передаваемой во втором аргументе обработчика:
В этом поле задаётся значение, которое зависит от программного интерфейса, доставляющего уведомление.
В этом поле указывается номер сигнала (т. е., тоже значение, что и в sigev_signo).
В этом поле содержится значение, указанное в sigev_value.
В зависимости от программного интерфейса остальным полям в структуре siginfo_t также могут быть присвоены значения.
Эта информация также доступна, если сигнал принимается с помощью sigwaitinfo(2).
Уведомить процесс с помощью вызова sigev_notify_function «как если бы» это была бы начальная функция новой нити (среди возможностей реализации здесь может быть: каждое уведомление таймера приводит к созданию новой нити, или создаётся нить для получения всех уведомлений). Функция вызывается с единственным аргументом sigev_value. Если sigev_notify_attributes не равно NULL, то значение должно указывать на структуру pthread_attr_t, в которой определены атрибуты новой нити (смотрите pthread_attr_init(3)).
В настоящее время используется только таймерами 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 <fatzer2@gmail.com>, Azamat Hackimov <azamat.hackimov@gmail.com>, Hotellook, Nikita <zxcvbnm3230@mail.ru>, Spiros Georgaras <sng@hellug.gr>, Vladislav <ivladislavefimov@gmail.com>, Yuri Kozlov <yuray@komyakino.ru> и Иван Павлов <pavia00@gmail.com>

Этот перевод является свободной программной документацией; он распространяется на условиях общедоступной лицензии GNU (GNU General Public License - GPL, https://www.gnu.org/licenses/gpl-3.0.html версии 3 или более поздней) в отношении авторского права, но БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ.

Если вы обнаружите какие-либо ошибки в переводе этой страницы руководства, пожалуйста, сообщите об этом разработчику(ам) по его(их) адресу(ам) электронной почты или по адресу списка рассылки русских переводчиков.

30 октября 2022 г. Справочные страницы Linux 6.03