SignalSuspend(), SignalSuspend_r()

Приостановить поток до получения сигнала

Прототип:

#include <sys/neutrino.h>
int SignalSuspend( const sigset_t *set );
int SignalSuspend_r( const sigset_t *set );

Аргументы:

set
Указатель на объект sigset_t, определяющий сигналы, которые необходимо ожидать.

Библиотека:

libc

Описание:

Данные системные вызовы заменяют маску сигналов потока набором сигналов, на которые указывает set, а затем приостанавливают поток до тех пор, пока не будет доставлен сигнал, действием которого является либо выполнение обработчика сигнала, либо завершение потока. При возврате восстанавливается предыдущая маска сигнала.

Функции SignalSuspend() и SignalSuspend_r() идентичны, за исключением того, как они указывают на ошибки.


Note: Вместо прямого использования этих системных вызовов следует рассмотреть возможность вызова sigsuspend().

Попытки заблокировать SIGKILL или SIGSTOP игнорируются. Эти действия не приводят к возникновению ошибки.

При использовании SignalSuspend() для синхронного ожидания сигнала, следует рассмотреть возможность использования более эффективного вызова в реальном времени sigwaitinfo() стандарта POSIX 1003.1b.

Состояния блокировки:

STATE_SIGSUSPEND
Вызывающий поток блокируется в ожидании сигнала.

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

Поскольку SignalSuspend() и SignalSuspend_r() блокируются до тех пор, пока не будет прерваны, возвращаемое значение при успешном завершении отсутствует.

SignalSuspend()
Функция всегда возвращает -1, код ошибки записывается в errno.
SignalSuspend_r()
Функция НЕ устанавливает errno и возвращает один из представленных ниже кодов.

Если обработчик сигнала вызывает longjmp() или siglongjmp(), то SignalSuspend() и SignalSuspend_r() не завершатся.

Коды ошибок:

EINTR
Вызов был прерван сигналом (ожидаемое поведение).
EFAULT
Произошла ошибка при попытке ядра получить доступ к предоставленным буферам.
ETIMEDOUT
Тайм-аут ядра разблокировал вызов (см. TimerTimeout()).

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

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

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

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

SignalKill(), sigsuspend()




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