Страница 213 из 324
Если сигнал заблокирован процессом, он не будет доставлен, но останется ждать обработки. Программа может определить с помощью функции sigpending, какие из заблокированных ею сигналов ждут обработки.
<b>#include <signal.h></b>
<b>int sigpending(sigset_t *set);</b>
Она записывает множество сигналов, заблокированных от доставки и ждущих обработки, в множество сигналов, на которое указывает аргумент set. Функция возвращает 0 при успешном завершении и -1 в противном случае с переменной errno, содержащей ошибку. Данная функция может пригодиться, когда программе потребуется обрабатывать сигналы и управлять моментом вызова функции обработки.
С помощью функции sigsuspend процесс может приостановить выполнение, пока не будет доставлен один сигнал из множества сигналов. Это более общая форма функции pause, с которой вы уже встречались.
<b>#include <signal.h></b>
<b>int sigsuspend(const sigset_t *sigmask);</b>
Функция sigsuspend замещает маску сигналов процесса множеством сигналов, заданным в аргументе sigmask, и затем приостанавливает выполнение. Оно будет возобновлено после выполнения функции обработки сигнала. Если полученный сигнал завершает программу, sigsuspend никогда не вернет ей управление. Если полученный сигнал не завершает программу, sigsuspend вернет с переменной errno, равной EINTR.
Поле sa_flags структуры sigaction, применяемой в функции sigaction, может содержать значения, изменяющие поведение сигнала (табл. 11.5).
Таблица 11.5