sigsuspend()

Блокироваться до тех пор, пока сигнал не вызовет обработчик сигнала

Прототип:

#include <signal.h>
int sigsuspend( const sigset_t *sigmask );

Аргументы:

sigmask
Указатель на объект sigset_t, определяющий новую маску сигналов.

Библиотека:

libc

Описание:

Функция sigsuspend() замещает маску сигналов потока на sigmask и приостанавливает его выполнение до поступления сигнала, реакция на который будет либо в вызове функции-обработчика, либо в терминировании потока.

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

-1
Если функция возвращает управление; Код ошибки записан в errno.

Коды ошибок:

EFAULT
При обращении к буферу возникла ошибка.
EINTR
Вызывающий поток получил сигнал и возвращено управление из функции-обработчика.

Примеры:

/*
* This program pauses until a signal other than
* a SIGINT occurs. In this case a SIGALRM.
*/
#include <stdio.h>
#include <signal.h>
#include <stdlib.h>
#include <unistd.h>
sigset_t set;
int main( void )
{
sigemptyset( &set );
sigaddset( &set, SIGINT );
printf( "Program suspended and immune to breaks.\n" );
printf( "A SIGALRM will terminate the program in 10 seconds.\n" );
alarm( 10 );
sigsuspend( &set );
return (EXIT_SUCCESS);
}

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

POSIX 1003.1

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

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

pause(), pthread_sigmask(), sigaction(), sigpending(), sigprocmask()




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