Maison > développement back-end > C++ > Comment gérer gracieusement les interruptions Ctrl-C en C avec la fonction Sigaction ?

Comment gérer gracieusement les interruptions Ctrl-C en C avec la fonction Sigaction ?

Mary-Kate Olsen
Libérer: 2024-11-13 01:35:02
original
586 Les gens l'ont consulté

How to Gracefully Handle Ctrl-C Interrupts in C   with the Sigaction Function?

Intercepter les événements Ctrl-C en C

Intercepter les événements Ctrl-C est une tâche nécessaire en programmation, surtout lorsque vous souhaitez répondre gracieusement à interruptions inattendues.

Utiliser Sigaction

En C, il est plus fiable d'utiliser la fonction sigaction pour gérer les signaux. La syntaxe est la suivante :

int sigaction(int signum, const struct sigaction *act, struct sigaction *oldact);
Copier après la connexion

Où :

  • signum : Le numéro du signal à traiter, pour Ctrl-C, c'est SIGINT.
  • act : Spécifie l'action du nouveau gestionnaire de signal.
  • oldact : stocke le comportement précédent.

Dans l'exemple donné par Thomas, la structure sigaction est la suivante :

struct sigaction sigIntHandler;

sigIntHandler.sa_handler = my_handler;
sigemptyset(&sigIntHandler.sa_mask);
sigIntHandler.sa_flags = 0;
Copier après la connexion

Où :

  • sa_handler : pointe vers la fonction handler .
  • sa_mask : Le masque de signal à empêcher lors du traitement de ce signal.
  • sa_flags : indicateurs supplémentaires, généralement 0.

Utilisez cette structure de sigaction avec le signal SIGINT :

sigaction(SIGINT, &sigIntHandler, NULL);
Copier après la connexion

Fonction de gestionnaire

Enfin, vous avez besoin d'une fonction de gestionnaire pour répondre au signal. Dans l'exemple, my_handler imprime simplement un message et quitte le programme :

void my_handler(int s){
   printf("Caught signal %d\n", s);
   exit(1);
}
Copier après la connexion

Code complet

Voici le code complet utilisant sigaction pour capturer les événements Ctrl-C :

#include 
#include 
#include 
#include 

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

En utilisant sigaction, vous pouvez détecter de manière fiable les événements Ctrl-C et prendre les mesures appropriées.

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 de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal