
{filelink=13358}
# include
# include
# include
# include
volatile sig_atomic_t i; /* timer accessible dans l'operation atomique.*/
void sigint_handler( int sig )
{
char c;
if ( sig != SIGINT ) exit( 1 );
signal( SIGINT, SIG_IGN );
puts("nVoulez vous quitter le programme? [y/n]");
while (( c = tolower( getchar( ) ))
!= 'y' && c != 'n' );
if ( c == 'y' )
exit(0);//si oui, quitter le programme
else
i = 0; //sinon, Ré-initialiser le timer
signal( SIGINT, sigint_handler ); // Réinstaller le 'handler'.
}
int main( )
{
if ( signal( SIGINT, sigint_handler ) == SIG_ERR )
{
perror("Impossible d'installer le handler 'SIGINT'");
exit(3);
}
while (1)
{
puts( "Pressez sur Ctrl+C pour arr^ter la boucle.");
for ( i = 0 ; i < SIG_ATOMIC_MAX ; i++ )
if ( i % 100000 == 0)
{
printf( "r%d ", i / 100000 );
fflush( stdout );
}
// simuler l'action 'Ctrl+C'
raise( SIGINT );
}
return 0;
}