Maison  >  Article  >  développement back-end  >  Comment gérer gracieusement les événements Ctrl-C en C ?

Comment gérer gracieusement les événements Ctrl-C en C ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-11-11 01:47:02208parcourir

How to Gracefully Handle Ctrl-C Events in C  ?

Capturer les événements Ctrl-C en C

En C, la capture des événements Ctrl-C (SIGINT) est cruciale pour gérer la fin gracieuse du programme. La bibliothèque de signaux fournit un mécanisme simple pour cela, mais sa fiabilité varie selon les différentes implémentations.

Pour garantir un comportement cohérent, il est recommandé d'utiliser la fonction sigaction à la place. Voici une version révisée du code de Tom utilisant 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;
}

Ce code définit un gestionnaire de signal, my_handler, qui imprime un message et quitte le programme lorsqu'un signal SIGINT (Ctrl-C) est reçu. La fonction sigaction enregistre le gestionnaire pour le signal SIGINT et définit les indicateurs nécessaires pour un comportement correct.

Maintenant, lorsque le programme est en cours d'exécution et que Ctrl-C est enfoncé, il captera le signal et invoquera le gestionnaire, qui imprime à son tour le message approprié et termine le programme avec élégance.

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