Fonction de bibliothèque C - signal ()
La description
La fonction de bibliothèque C void (*signal(int sig, void (*func)(int)))(int) définit une fonction pour gérer le signal, c'est-à-dire un gestionnaire de signal avec un numéro de signal sig.
Déclaration
Voici la déclaration de la fonction signal ().
void (*signal(int sig, void (*func)(int)))(int)
Paramètres
sig- Il s'agit du numéro de signal auquel une fonction de gestion est définie. Voici quelques numéros de signaux standard importants -
N ° Sr. | Macro et signal |
---|---|
1 | SIGABRT (Signal Abort) Arrêt anormal, tel que déclenché par la fonction. |
2 | SIGFPE (Exception à virgule flottante du signal) Opération arithmétique erronée, telle qu'une division par zéro ou une opération entraînant un débordement (pas nécessairement avec une opération à virgule flottante). |
3 | SIGILL (Signal Instruction illégale) Image de fonction non valide, telle qu'une instruction illégale. Cela est généralement dû à une corruption du code ou à une tentative d'exécution de données. |
4 | SIGINT (Signal Interruption) Signal d'attention interactif. Généralement généré par l'utilisateur de l'application. |
5 | SIGSEGV (Violation de segmentation du signal) Accès non valide au stockage - Lorsqu'un programme tente de lire ou d'écrire en dehors de la mémoire, il lui est alloué. |
6 | SIGTERM (Signal Terminate) Demande de terminaison envoyée au programme. |
func- Ceci est un pointeur vers une fonction. Cela peut être une fonction définie par le programmeur ou l'une des fonctions prédéfinies suivantes -
N ° Sr. | Description de la fonction |
---|---|
1 | SIG_DFL Traitement par défaut - Le signal est géré par l'action par défaut pour ce signal particulier. |
2 | SIG_IGN Ignorer le signal - Le signal est ignoré. |
Valeur de retour
Cette fonction renvoie la valeur précédente du gestionnaire de signaux, ou SIG_ERR en cas d'erreur.
Exemple
L'exemple suivant montre l'utilisation de la fonction signal ().
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <signal.h>
void sighandler(int);
int main () {
signal(SIGINT, sighandler);
while(1) {
printf("Going to sleep for a second...\n");
sleep(1);
}
return(0);
}
void sighandler(int signum) {
printf("Caught signal %d, coming out...\n", signum);
exit(1);
}
Compilons et exécutons le programme ci-dessus qui produira le résultat suivant et le programme ira en boucle infinie. Pour sortir du programme, nous avons utilisé les touches CTRL + C.
Going to sleep for a second...
Going to sleep for a second...
Going to sleep for a second...
Going to sleep for a second...
Going to sleep for a second...
Caught signal 2, coming out...