"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > 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 ?

Publié le 2024-11-17
Parcourir:599

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, en particulier lorsque vous souhaitez répondre gracieusement à interruptions inattendues.

Utilisation de 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);

où :

  • signum : to à traiter Le numéro du signal, pour Ctrl-C, 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;

où :

  • sa_handler : pointe vers la fonction de gestionnaire.
  • sa_mask : Le masque de signal à empêcher pendant le 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);

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);
}

Code complet

Ce qui suit est le code complet qui utilise la 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;    
}

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

Dernier tutoriel Plus>

Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

Copyright© 2022 湘ICP备2022001581号-3