Verwenden von Sigaction zum Behandeln von Strg-C-Ereignissen in C
Um ein Strg-C-Ereignis in C effizient abzufangen, ist der zuverlässigste Ansatz die Verwendung von „Sigaction“. Funktion. Es bietet mehr Kontrolle und Kompatibilität als die einfache Signalfunktion.
Die Implementierung von Sigaction erfordert einen strukturierten Ansatz:
-
Deklarieren Sie eine Sigaction-Struktur:
Definieren Sie eine „sigaction“-Struktur mit dem Namen „sigIntHandler“.
-
Legen Sie den Signalhandler fest:
Weisen Sie „sigIntHandler.sa_handler“ die Adresse der Handlerfunktion („my_handler“) zu. Führen Sie in der Handler-Funktion beim Empfang des Signals die gewünschten Aktionen aus.
-
Signalmaske initialisieren:
Initialisieren Sie „sigIntHandler.sa_mask“ mit „sigemptyset“ auf einen leeren Signalsatz. Dadurch kann der Handler auf das angegebene Signal reagieren, ohne andere zu blockieren.
-
Signalaktionsflags setzen:
Setzen Sie „sigIntHandler.sa_flags“ auf „0“, um die Standardoptionen zu verwenden.
-
Signalaktion registrieren:
Verwenden Sie „sigaction“ mit dem „SIGINT“-Signal und der definierten Handlerstruktur („sigIntHandler“), um die Signalaktion zu registrieren.
-
Ausführung anhalten:
Rufen Sie „pause()“ auf, um die Programmausführung anzuhalten, bis ein Signal empfangen wird.
-
Beispielcode:
Das Folgende Der geänderte Code aus der Frage demonstriert die Verwendung von „Sigaction“:
#include <signal.h>
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
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
Dieser Ansatz bietet einen robusten Mechanismus für die Behandlung von Strg-C-Ereignissen in C und gewährleistet Zuverlässigkeit und Effizienz in verschiedenen Implementierungen.
Das obige ist der detaillierte Inhalt vonWie kann „sigaction' verwendet werden, um Strg-C-Ereignisse in C zu verarbeiten?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!