47 lines
958 B
C
47 lines
958 B
C
|
/*
|
||
|
* This program waits until a SIGINT signal
|
||
|
* is received.
|
||
|
*/
|
||
|
#include <stdio.h>
|
||
|
#include <signal.h>
|
||
|
|
||
|
sig_atomic_t signal_count;
|
||
|
sig_atomic_t signal_number;
|
||
|
|
||
|
static void alarm_handler( int signum )
|
||
|
{
|
||
|
++signal_count;
|
||
|
signal_number = signum;
|
||
|
}
|
||
|
|
||
|
void main()
|
||
|
{
|
||
|
unsigned long i;
|
||
|
|
||
|
signal_count = 0;
|
||
|
signal_number = 0;
|
||
|
signal( SIGINT, alarm_handler );
|
||
|
|
||
|
printf("Signal will be auto-raised on iteration "
|
||
|
"10000 or hit CTRL-C.\n");
|
||
|
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 the signal.\n",
|
||
|
signal_number);
|
||
|
}
|
||
|
}
|