Digg StumbleUpon LinkedIn YouTube Flickr Facebook Twitter RSS Reset

C/C++: Spécifier une fonction à exécuter si le programme reçoit un signal donné à l’aide de la fonction ‘* signal ‘


{filelink=13358}

# include <stdio.h>
# include <stdlib.h>
# include <stdint.h>
# include <signal.h>
 
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;
}

No comments yet.

Leave a Comment