Utiliser sigaction pour gérer les événements Ctrl-C en C
Pour intercepter efficacement un événement Ctrl-C en C, l'approche la plus fiable consiste à utiliser la « sigaction » fonction. Il offre un meilleur contrôle et une plus grande compatibilité que la simple fonction « signal ».
La mise en œuvre de la sigaction nécessite une approche structurée :
-
Déclarer une structure de sigaction :
Définir une structure 'sigaction' nommée 'sigIntHandler'.
-
Définissez le gestionnaire de signal :
Attribuez l'adresse de la fonction de gestionnaire ("my_handler") à 'sigIntHandler.sa_handler'. Dans la fonction de gestionnaire, effectuez les actions souhaitées dès la réception du signal.
-
Initialiser le masque de signal :
Initialisez 'sigIntHandler.sa_mask' sur un ensemble de signaux vide à l'aide de 'sigemptyset'. Cela permet au gestionnaire de répondre au signal spécifié sans bloquer les autres.
-
Définir les indicateurs d'action du signal :
Définissez 'sigIntHandler.sa_flags' sur '0' pour utiliser les options par défaut.
-
Enregistrer l'action du signal :
Utilisez « sigaction » avec le signal 'SIGINT' et la structure de gestionnaire définie ("sigIntHandler") pour enregistrer l'action du signal.
-
Pause de l'exécution :
Appelez 'pause()' pour arrêter l'exécution du programme jusqu'à ce qu'un signal soit reçu.
-
Exemple de code :
Le code modifié suivant de la question démontre l'utilisation de « sigaction » :
#include <signal.h>
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
void my_handler(int s){
printf("Caught signal %d\n",s);
exit(1);
}
int main(int argc,char** argv)
{
struct sigaction sigIntHandler;
sigIntHandler.sa_handler = my_handler;
sigemptyset(&sigIntHandler.sa_mask);
sigIntHandler.sa_flags = 0;
sigaction(SIGINT, &sigIntHandler, NULL);
pause();
return 0;
}
Cette approche fournit un mécanisme robuste pour gérer les événements Ctrl-C en C , garantissant la fiabilité et l'efficacité dans diverses implémentations.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!
Déclaration:Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn