„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > Wie behandelt man Strg-C-Interrupts in C++ mit der Sigaction-Funktion ordnungsgemäß?

Wie behandelt man Strg-C-Interrupts in C++ mit der Sigaction-Funktion ordnungsgemäß?

Veröffentlicht am 17.11.2024
Durchsuche:934

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

Abfangen von Strg-C-Ereignissen in C

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

Verwenden von Sigaction

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

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

wobei:

  • signum: to verarbeitet werden Die Nummer des Signals, für Strg-C, SIGINT.
  • act: Gibt die Aktion des neuen Signalhandlers an.
  • oldact: Speichert vorheriges Verhalten.

In dem von Thomas angegebenen Beispiel ist 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 Handlerfunktion.
  • 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 Handlerfunktion, um auf das Signal zu reagieren. 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

Das Folgende 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-Ereignisse zuverlässig abfangen und entsprechende Maßnahmen ergreifen.

Neuestes Tutorial Mehr>

Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.

Copyright© 2022 湘ICP备2022001581号-3