« Programmation C/Gestion des signaux » : différence entre les versions

Contenu supprimé Contenu ajouté
→‎Définir un gestionnaire de signal : précision sur SIG_IGN
Tados (discussion | contributions)
mAucun résumé des modifications
Ligne 7 :
C'est à chaque processus de déterminer ce qu'il fait quand il reçoit un signal de numéro donné, en définissant un gestionnaire de signal pour tous les signaux qu'il le souhaite. Vous l'aurez remarqué, dans tous les exemples de ce livre rencontrés jusqu'à présent, nous ne nous sommes pas occupés de savoir quels signaux nous pourrions recevoir, et comment il fallait les traiter. En l'absence de précisions dans nos programmes, l'implémentation fournira en effet un gestionnaire de signal par défaut, qui le plus souvent se contentera d'arrêter le programme.
 
Les fonctions suivantes, fournies par l'en-tête <tt><signal.h></tt>, sont utilisées dans la gestion des signaux :
* <tt>signal()</tt> pour définir un gestionnaire de signal;
* et <tt>raise()</tt> pour envoyer un signal au processus courant.
Ligne 33 :
* et un pointeur vers la fonction de gestion du signal.
 
Le premier paramètre est le numéro du signal. La norme définit un faible nombre de signaux, par des macros dans l'en-tête <tt><signal.h></tt>, par exemple <tt>SIGSEGV</tt> qui indique un accès illégal à la mémoire (''SEGmentation Violation''), et laisse à l'implémentation la liberté de définir d'autres types de signaux.
 
Pour le deuxième paramètre, on peut donner trois valeurs possibles:
*<tt>SIG_IGN</tt> (macro définie dans <tt><signal.h></tt>): tout signal ayant le numéro <tt>sig</tt> sera ignoré (i.e. rien ne se passera, le programme continue de s'exécuter);
*<tt>SIG_DFL</tt> (id.): le gestionnaire de signal par défaut sera mis en place pour ce type de signal.
*un pointeur vers une fonction de type <tt>t_handler</tt>: cette fonction sera appelée lorsqu'un signal de type <tt>sig</tt> sera reçu par le processus.