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

Author:


Download

# 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;
}

Leave a Reply

Your email address will not be published. Required fields are marked *