Fonctions de bibliothèque C -signal()
Bibliothèque standard C - <signal.h>
Description
Fonctions de la bibliothèque Cvoid (*signal(int sig, void (*func)(int)))(int)Configurer une fonction pour gérer le signal, c'est-à-dire avecsigLe gestionnaire de signal pour le paramètre.
signalLa fonction est une fonction de la bibliothèque standard C, utilisée pour configurer des gestionnaires de signaux. Elle est définie dans<signal.h>Dans le fichier d'en-tête.signalLa fonction permet à un programme de définir, lorsque certains signaux (tels queSIGINT, générés en appuyant sur Ctrl+C) arrivent, le gestionnaire à exécuter.
Déclaration
Voici la déclaration de la fonction signal().
void (*signal(int sig, void (*func)(int)))(int);
Paramètre
- sig-- Le code de signal utilisé comme variable dans le gestionnaire de signal. Voici quelques constantes de signal standard importantes :
| Macro | signal |
|---|---|
| SIGABRT | (Signal Abort) Programme terminé anormalement. |
| SIGFPE | (Signal Floating-Point Exception) Erreur d'opération arithmétique, comme un diviseur égal à 0 ou un dépassement de capacité (pas nécessairement une opération en virgule flottante). |
| SIGILL | (Signal d'instruction illégale) Image de fonction illégale, telle qu'une instruction illégale, généralement causée par une variante dans le code ou une tentative d'exécuter des données. |
| SIGINT | (Signal Interrupt) Signal d'interruption, tel que Ctrl-C, généralement généré par l'utilisateur. |
| SIGSEGV | (Signal de violation de segmentation) Un accès mémoire illégal, tel que l'accès à une unité de mémoire inexistante. |
| SIGTERM | (Signal de terminaison) Le signal de demande de terminaison envoyé à ce programme. |
- func-- Un pointeur vers une fonction. Il peut s'agir d'une fonction définie par le programme, ou de l'une des fonctions prédéfinies suivantes :
| SIG_DFL | Le gestionnaire de signal par défaut. |
| SIG_IGN | Ignorer le signal. |
Valeur de retour
Cette fonction renvoie la valeur précédente du gestionnaire de signal ; en cas d'erreur, elle renvoie SIG_ERR.
Exemple
L'exemple suivant illustre l'utilisation de la fonction signal().
Exemple
#include <unistd.h>
#include <stdlib.h>
#include <signal.h>
void sighandler(int);
int main()
{
signal(SIGINT, sighandler);
while(1)
{
printf(Début du sommeil pendant une seconde...\n");
sleep(1);
}
return(0);
}
void sighandler(int signum)
{
printf(Signal %d capturé, sortie...\n", signum);
exit(1);
}
Compilons et exécutons le programme ci-dessus, ce qui produira les résultats suivants, et le programme entrera dans une boucle infinie, nécessitant l'utilisation de CTRL + C pour sortir du programme.
开始休眠一秒钟... 开始休眠一秒钟... 开始休眠一秒钟... 开始休眠一秒钟... 开始休眠一秒钟... 捕获信号 2,跳出...autres extensions