Сгенерировать сигнал
#include <signal.h>int raise( int condition );
libc
Функция raise() генерирует сигнал condition. Вызов raise() эквивалентен вызову:
pthread_kill( pthread_self(), condition );
Используйте SignalAction() или signal() для указания действий, которые следует предпринять при получении сигнала.
Функция raise() не завершается, если действием для данного сигнала является завершение программы или передача управление с помощью функции longjmp().
Ожидать получение сигнала 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" );} elseif ( 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
Предыдущий раздел: Описание API системной библиотеки