Heim >Backend-Entwicklung >C++ >Wie kann man Strg-C-Interrupts in C mit der Sigaction-Funktion elegant behandeln?

Wie kann man Strg-C-Interrupts in C mit der Sigaction-Funktion elegant behandeln?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-11-13 01:35:02554Durchsuche

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

Strg-C-Ereignisse in C abfangen

Das Abfangen von Strg-C-Ereignissen ist eine notwendige Aufgabe in der Programmierung, insbesondere wenn Sie elegant darauf reagieren möchten unerwartete Unterbrechungen.

Sigaction verwenden

In C ist es zuverlässiger, die Sigaction-Funktion zur Signalverarbeitung zu verwenden. Die Syntax lautet wie folgt:

int sigaction(int signum, const struct sigaction *act, struct sigaction *oldact);

Wobei:

  • Signum: Die Nummer des zu verarbeitenden Signals, bei Strg-C ist es SIGINT.
  • act: Gibt die Aktion des neuen Signalhandlers an.
  • oldact: Speichert früheres Verhalten.

Im Beispiel von Thomas lautet die Sigaction-Struktur wie folgt:

struct sigaction sigIntHandler;

sigIntHandler.sa_handler = my_handler;
sigemptyset(&sigIntHandler.sa_mask);
sigIntHandler.sa_flags = 0;

Wobei:

  • sa_handler: zeigt auf die Handler-Funktion .
  • sa_mask: Die Signalmaske, die während der Verarbeitung dieses Signals verhindert werden soll.
  • sa_flags: zusätzliche Flags, normalerweise 0.

Verwenden Sie diese Sigaction-Struktur mit dem SIGINT-Signal:

sigaction(SIGINT, &sigIntHandler, NULL);

Handler-Funktion

Schließlich benötigen Sie eine Handler-Funktion, um zu antworten zum Signal. Im Beispiel gibt my_handler einfach eine Nachricht aus und beendet das Programm:

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

Vollständiger Code

Hier ist der vollständige Code, der Sigaction verwendet, um Strg-C-Ereignisse zu erfassen :

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

Durch die Verwendung von Sigaction können Sie Strg-C zuverlässig abfangen Beheben Sie den Vorfall und ergreifen Sie entsprechende Maßnahmen.

Das obige ist der detaillierte Inhalt vonWie kann man Strg-C-Interrupts in C mit der Sigaction-Funktion elegant behandeln?. 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