SIGSET(2) SIGSET(2)
НАЗВАНИЕ
sigset, sighold, sigrelse, sigignore, sigpause - управ-
ление сигналами
СИНТАКСИС
#include
void (*sigset (sig, func)) ( )
int sig;
void (*func) ( );
int sighold (sig)
int sig;
int sigrelse (sig)
int sig;
int sigignore (sig)
int sig;
int sigpause (sig)
int sig;
ОПИСАНИЕ
Перечисленные системные вызовы составляют механизм уп-
равления сигналами для прикладных процессов.
Системный вызов sigset аналогичен вызову signal(2) с
одним важным дополнением: sigset позволяет откладывать
сигналы. Ниже описаны только отличия sigset от signal.
Аргумент func, помимо SIG_DFL, SIG_IGN и адреса функ-
ции, может принимать еще одно значение:
SIG_HOLD - откладывание сигнала
При получении сигнала sig он будет отложен. Если в
момент обращения к sigset уже существовал отложен-
ный сигнал sig, он остается таковым. Может быть
отложен только один сигнал каждого типа - осталь-
ные пропадают.
При установлении стандартной реакции на сигнал
(SIG_DFL) ранее отложенный сигнал sig (если он был)
становится активным.
При установлении режима игнорирования сигнала (SIG_IGN)
ранее отложенный сигнал sig (если он был) пропадает.
При установлении режима перехвата сигнала (когда в ка-
честве аргумента func выступает адрес функции) ранее
отложенный сигнал sig (если он был) становится актив-
ным. Адрес функции обработки сигнала сохраняется сис-
темными вызовами, описанными ниже.
После получения сигнала, но перед вызовом функции обра-
ботки устанавливается режим откладывания (SIG_HOLD). Во
время нормального возврата из этой функции она восста-
навливается в качестве обработчика [это еще одно отли-
чие от signal(2)], а ранее отложенный сигнал sig (если
он был) становится активным. Если выход из функции об-
работки осуществлялся нелокальным переходом [см.
setjmp(3C)], для восстановления специфицированной поль-
зователем реакции на сигнал и активизации отложенного
сигнала следует воспользоваться описанным ниже систем-
ным вызовом sigrelse.
Системные вызовы sighold и sigrelse используются для
обрамления критического интервала. Sighold устанавлива-
ет для сигнала sig режим откладывания; sigrelse восста-
навливает реакцию на сигнал sig, специфицированную об-
ращением к sigset, и активизирует отложенный сигнал,
если он был.
Системный вызов sigignore устанавливает режим игнориро-
вания сигнала sig. Если отвлечься от возвращаемого зна-
чения, вызов sigignore (sig) эквивалентен sigset (sig,
SIG_IGN).
Системный вызов sigpause аналогичен pause(2) с одним
отличием: при наличии отложенного сигнала sig он акти-
визируется и выполняется его обработка, после чего вы-
зывающий процесс продолжает работу. Данный системный
вызов полезен при проверке значений переменных, изменя-
емых функцией обработки сигнала. Рекомендуется сначала
посредством sighold заблокировать сигнал sig, затем
проверить значения переменных. Если они не были измене-
ны, с помощью sigpause следует дождаться сигнала.
СМ. ТАКЖЕ
pause(2), signal(2), setjmp(3C).
ДИАГНОСТИКА
И в смысле возвращаемого значения системный вызов
sigset аналогичен вызову signal.
При успешном завершении системных вызовов, отличных от
sigset, результат равен 0; в случае ошибки возвращается
-1, а переменной errno присваивается код ошибки.
ПРЕДОСТЕРЕЖЕНИЯ
Не следует использовать системные вызовы signal(2) и
pause(2) совместно с описанными в данной статье средст-
вами.
|