Les signaux sont des événements qui peuvent avoir lieu pendant l'exécution du programme. Ils peuvent être dus au programme -- une division par zéro par exemple -- auquel cas ils sont dits synchrones; ou déclanché par quelque chose d'externe -- l'appui sur une touche particulière -- auquel cas ils sont dits asynchrones.
Lors de la réception d'un signal, le programme peut exécuter un gestionnaire enregistré au préalable, ou a une action définie par l'implémentation si aucun gestionnaire n'est enregistré.
La norme garanti très peu de choses quant au signaux: ni qu'ils peuvent être générés autrement que par raise() et abort(), ni qu'on peut faire dans un gestionnaire autre chose que de lire et modifier des variables volatiles de type sig_atomic_t
. En pratique, toute utilisation utilise des garanties plus fortes venant de l'implémentation (par exemple qu'elle est conforme à POSIX).
Macros | |
#define | SIG_DFL |
gestion par défaut | |
#define | SIG_IGN |
ignore | |
#define | SIG_ERR |
erreur dans signal() | |
#define | SIGABRT |
fin anormale | |
#define | SIGFPE |
erreur dans une expression arithmétique | |
#define | SIGILL |
erreur dans le code | |
#define | SIGINT |
signal interactif | |
#define | SIGSEGV |
accès à de la mémoire inaccessible | |
#define | SIGTERM |
demande de fin du programme | |
Définition de type | |
typedef _integral | sig_atomic_t |
type entier atomique | |
Fonctions | |
void(*)(int) | signal (int sig, void(*handler)(int)) |
enregistre un gestionnaire de signal | |
int | raise (int sig) |
génère un signal |
#define SIG_DFL |
Valeur pouvant être enregistrée comme gestionnaire de signal indiquant à l'implémentation qu'elle doit avoir son comportement par défaut.
#define SIG_ERR |
Valeur retournée par signal() en cas d'erreur.
#define SIG_IGN |
Valeur pouvant être enregistrée comme gestionnaire de signal indiquant à l'implémentation que le signal doit être ignoré.
#define SIGABRT |
Constante désignant un signal utilisé pour demander la fin anormale du programme (entre autre généré par abort()).
#define SIGFPE |
Constante désignant un signal utilisé pour signaler une erreur arithmétique telle qu'une division par zéro ou un overflow.
#define SIGILL |
Constante désignant un signal utilisé pour signaler une erreur dans le code exécutable.
#define SIGINT |
Constante désignant un signal utilisé interactivement.
#define SIGSEGV |
Constante désignant un signal utilisé pour signaler une erreur dans l'accès à la mémoire -- problème d'alignement, zone mémoire non présente dans le processus, ...
#define SIGTERM |
Constante désignant un signal utilisé pour demander la fin du programme.
typedef _integral sig_atomic_t |
Un type dont les objets peuvent être accédé de manière atomique même en présence de signaux asynchrones. Seuls les objets de ce type peuvent être lus ou modifiés dans les gestionnaires de signaux en étant sûr de ne pas interférer avec le reste du programme.
int raise | ( | int | sig | ) |
Envoie le signal sig
au programme.
void(*)(int) signal | ( | int | sig, | |
void(*)(int) | handler | |||
) |
Enregistre handler
comme étant la fonction à appeler en cas de signal sig
. handler
peut être: