Heim >Backend-Entwicklung >C++ >Wie kann ich Strg-C-Signale in C abfangen?

Wie kann ich Strg-C-Signale in C abfangen?

DDD
DDDOriginal
2024-11-16 15:26:03375Durchsuche

How can I intercept Ctrl C signals in C  ?

Control-C-Signale in C abfangen

Im Bereich der Programmierung ist es oft notwendig, Tastaturereignisse zu erfassen, wie zum Beispiel die allgegenwärtige Strg-Taste C, was normalerweise die Programmbeendigung auslöst. Dieser Artikel befasst sich mit diesem speziellen Bedarf: Wie fängt man Strg-C-Signale in C ab? Ereignisse: Signal und Sigaktion.

Verwenden Sigaction

Die Sigaction-Funktion bietet im Vergleich zu Signal einen zuverlässigeren Ansatz, da sie eine bessere Kontrolle und Portabilität über verschiedene Implementierungen hinweg bietet. Um Sigaction zu verwenden, folgen Sie diesen Schritten:

Erforderliche Header einschließen:

  1. Definieren Sie eine Signalhandlerfunktion:

    #include <signal.h>
    #include <stdlib.h>
    #include <stdio.h>
    #include <unistd.h>
    In diesem Handler können Sie die Aktionen angeben, die ausgeführt werden sollen, wenn Strg C gedrückt wird gedrückt.
  2. Konfigurieren Sie die Sigaktion:
    void my_handler(int s){
        printf("Caught signal %d\n",s);
        exit(1); 
    }

    Hier verbinden Sie Ihren Signalhandler mit dem Strg-C-Signal (SIGINT) und legen signalbezogene Einstellungen fest.
  3. Programm anhalten:
    struct sigaction sigIntHandler;
    
    sigIntHandler.sa_handler = my_handler;
    sigemptyset(&amp;sigIntHandler.sa_mask);
    sigIntHandler.sa_flags = 0;
    
    sigaction(SIGINT, &amp;sigIntHandler, NULL);

    Diese Funktion bewirkt, dass das Programm auf Signale wartet, einschließlich Strg C.
  4. pause();
    Beispiel:

  5. Das folgende Beispiel zeigt, wie Sigaction zum Erfassen von Strg C verwendet wird Ereignisse:

Wenn Sie dieses Programm ausführen und Strg C drücken, wird „Signal 2 gefangen“ gedruckt und beendet anmutig.

Das obige ist der detaillierte Inhalt vonWie kann ich Strg-C-Signale in C abfangen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn