raise()

Сгенерировать сигнал

Прототип:

#include <signal.h>
int raise( int condition );

Аргументы:

condition
Сигнал, который требуется сгенерировать. Для получения дополнительной информации см. signal().

Библиотека:

libc

Описание:

Функция raise() генерирует сигнал condition. Вызов raise() эквивалентен вызову:

pthread_kill( pthread_self(), condition );

Используйте SignalAction() или signal() для указания действий, которые следует предпринять при получении сигнала.

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

0
Успешное завершение.
≠0
Возникла ошибка. Код ошибки записан в errno.

Функция raise() не завершается, если действием для данного сигнала является завершение программы или передача управление с помощью функции longjmp().

Коды ошибок:

EAGAIN
Недостаточно системных ресурсов для доставки сигнала.
EINVAL
Значение condition представляет собой неверный номер сигнала.

Примеры:

Ожидать получение сигнала SIGINT. Сигнал автоматически возникает на итерации 10000 или при нажатии Ctrl-C:

#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
sig_atomic_t signal_count;
sig_atomic_t signal_number;
void alarm_handler( int signum )
{
++signal_count;
signal_number = signum;
}
int main( void )
{
unsigned long i;
signal_count = 0;
signal_number = 0;
signal( SIGINT, alarm_handler );
printf( "Iteration: " );
for ( i = 0; i < 100000; ++i )
{
printf( "\b\b\b\b\b%*d", 5, i );
if ( i == 10000 )
raise( SIGINT );
if ( signal_count > 0 )
break;
}
if ( i == 100000 )
{
printf( "\nNo signal was raised.\n" );
} else
if ( i == 10000 )
{
printf( "\nSignal %d was raised by the "
"raise() function.\n", signal_number );
} else {
printf( "\nUser raised signal #%d.\n", signal_number );
}
return (EXIT_SUCCESS);
}

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

ANSI, POSIX 1003.1

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

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

signal(), SignalAction()




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