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:
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:
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.
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