Mettre en place un gestionnaire de signaux

Problème

Vous voulez gérer vous-même les signaux.

Solution

Mettez en place un gestionnaire de signaux avec sigaction().

Discussion

Un gestionnaire de signaux consiste en une structure, de type struct sigaction, et en une fonction à appeler en cas d’interruption. La structure contient un pointeur sur cette fonction, ainsi que des options et un masque de signaux empêchant l’apparition d’autres signaux pendant la gestion de l’interruption. 

La mise en place du gestionnaire de signaux passe donc par l’écriture d’une fonction comme celle-ci :


void 
signal_handler (int signal_id) 
{ 
  /* Votre code ici */ 
}
 

Puis nous créons la structure qui décrit le gestionnaire de signaux et nous appelons sigaction() avec cette structure pour gérer un signal, ici SIGINT :


  struct sigaction sa; 
  memset (&sa, 0, sizeof *sa); 
  sa.sa_handler = signal_handler; 
  sa.sa_flags = 0; 
  sigemptyset (&(sa.sa_mask)); 
  if (sigaction (SIGINT, &sa, NULL) != 0) 
    { 
      fprintf (stderr, "Problème avec sigaction()\n"); 
      exit (EXIT_FAILURE); 
    }
 

Les arguments de sigaction() sont donc l’identifiant du signal, suivi d’un pointeur sur une struct sigaction qui décrit le gestionnaire de signaux. Le dernier argument est un pointeur vers une autre struct sigaction, mais vide cette fois, qui contiendra après l’appel à sigaction() la description...

Pour consulter la suite, découvrez le livre suivant :
couv_EI3CACT.png
60-signet.svg
En version papier
20-ecran_lettre.svg
En version numérique
41-logo_abonnement.svg
En illimité avec l'abonnement ENI
130-boutique.svg
Sur la boutique officielle ENI
Précédent
Introduction
Suivant
Bloquer des signaux