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éfinissez 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.
-
Suspendre l'exécution :
Appelez « pause() » pour arrêter l'exécution du programme jusqu'à ce qu'un signal soit reçu.
-
Exemple de code :
Ce qui suit le code modifié 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;
}
Copier après la connexion
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!