Heim > Backend-Entwicklung > C++ > Hauptteil

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

Mary-Kate Olsen
Freigeben: 2024-11-13 01:35:02
Original
524 Leute haben es durchsucht

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);
Nach dem Login kopieren

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;
Nach dem Login kopieren

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);
Nach dem Login kopieren

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);
}
Nach dem Login kopieren

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;    
}
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage