C-Bibliotheksfunktionen -signal()
C-Standardbibliothek - <signal.h>
Beschreibung
C-Bibliotheksfunktionenvoid (*signal(int sig, void (*func)(int)))(int)Richtet eine Funktion ein, um das Signal zu behandeln, d. h. mitsigden Signal-Handler für den Parameter.
signalDie Funktion gehört zur C-Standardbibliothek und wird verwendet, um Signal-Handler einzurichten. Sie ist definiert in<signal.h>In der Header-Datei.signalDie Funktion ermöglicht es einem Programm, festzulegen, welcher Handler ausgeführt werden soll, wenn bestimmte Signale (wie z. B.SIGINT, die durch Drücken von Ctrl+C erzeugt werden, eintreffen.
Deklaration
Nachfolgend finden Sie die Deklaration der Funktion signal().
void (*signal(int sig, void (*func)(int)))(int);
Parameter
- sig-- Der Signalcode, der als Variable im Signal-Handler verwendet wird. Hier sind einige wichtige Standard-Signal-Konstanten:
| Makro | signal |
|---|---|
| SIGABRT | (Signal Abort) Programm wurde abnormal beendet. |
| SIGFPE | (Signal Floating-Point Exception) Arithmetischer Operationsfehler, wie z. B. ein Divisor von 0 oder ein Überlauf (nicht unbedingt eine Gleitkommaoperation). |
| SIGILL | (Signal Illegal Instruction) Ungültiges Funktionsabbild, z. B. eine ungültige Anweisung, gewöhnlich verursacht durch eine Abweichung im Code oder einen Versuch, Daten auszuführen. |
| SIGINT | (Signal Interrupt) Interrupt-Signal, wie z. B. ctrl-C, wird normalerweise vom Benutzer erzeugt. |
| SIGSEGV | (Signal Segmentation Violation) Ungültiger Speicherzugriff, wie z. B. der Zugriff auf eine nicht vorhandene Speichereinheit. |
| SIGTERM | (Signal Terminate) Das Beendigungsanforderungssignal, das an dieses Programm gesendet wird. |
- func-- Ein Zeiger auf eine Funktion. Er kann eine vom Programm definierte Funktion oder eine der folgenden vordefinierten Funktionen sein:
| SIG_DFL | Der Standard-Signal-Handler. |
| SIG_IGN | Das Signal ignorieren. |
Rückgabewert
Diese Funktion gibt den vorherigen Wert des Signal-Handlers zurück; wenn ein Fehler auftritt, gibt sie SIG_ERR zurück.
Beispiel
Das folgende Beispiel demonstriert die Verwendung der Funktion signal().
Beispiel
#include <unistd.h>
#include <stdlib.h>
#include <signal.h>
void sighandler(int);
int main()
{
signal(SIGINT, sighandler);
while(1)
{
printf(Beginne für eine Sekunde zu schlafen...\n");
sleep(1);
}
return(0);
}
void sighandler(int signum)
{
printf(Signal %d abfangen, herausspringen...\n", signum);
exit(1);
}
Lassen Sie uns das obige Programm kompilieren und ausführen. Es wird die folgenden Ergebnisse liefern, und das Programm wird in eine Endlosschleife geraten, sodass die Verwendung von CTRL + C erforderlich ist, um das Programm zu verlassen.
开始休眠一秒钟... 开始休眠一秒钟... 开始休眠一秒钟... 开始休眠一秒钟... 开始休眠一秒钟... 捕获信号 2,跳出...Weitere Erweiterungen