Maison >développement back-end >C++ >Comment puis-je intercepter les signaux Ctrl C en C ?

Comment puis-je intercepter les signaux Ctrl C en C ?

DDD
DDDoriginal
2024-11-16 15:26:03376parcourir

How can I intercept Ctrl C signals in C  ?

Interception des signaux Control-C en C

Dans le domaine de la programmation, il est souvent nécessaire de capturer les événements du clavier, tels que l'omniprésent Ctrl C, qui déclenche généralement la fin du programme. Cet article répond à ce besoin spécifique : comment intercepter les signaux Ctrl C en C .

Capturer les événements Ctrl C

En C , il existe deux méthodes principales pour capturer Ctrl C événements : signal et sigaction.

Utilisation de sigaction

La fonction sigaction offre une approche plus fiable par rapport au signal, car elle offre un plus grand contrôle et une plus grande portabilité entre différentes implémentations. Pour utiliser sigaction, suivez ces étapes :

  1. Incluez les en-têtes nécessaires :

    #include <signal.h>
    #include <stdlib.h>
    #include <stdio.h>
    #include <unistd.h>
  2. Définissez une fonction de gestionnaire de signal :

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

    Dans ce gestionnaire, vous pouvez spécifier les actions à effectuer lorsque Ctrl C est enfoncé.

  3. Configurez la sigaction :

    struct sigaction sigIntHandler;
    
    sigIntHandler.sa_handler = my_handler;
    sigemptyset(&amp;sigIntHandler.sa_mask);
    sigIntHandler.sa_flags = 0;
    
    sigaction(SIGINT, &amp;sigIntHandler, NULL);

    Ici, vous attachez votre gestionnaire de signal au signal Ctrl C (SIGINT) et spécifiez les paramètres liés au signal.

  4. Suspendre le programme :

    pause();

    Cette fonction amène le programme à attendez les signaux, y compris Ctrl C.

Exemple :

L'exemple suivant montre comment utiliser la sigaction pour capturer les événements Ctrl C :

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

Lorsque vous exécutez ce programme et appuyez sur Ctrl C, il imprimera "Caught signal 2" et se terminera gracieusement.

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