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:
Makrosignal
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_DFLDer Standard-Signal-Handler.
SIG_IGNDas 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 <stdio.h>
#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,跳出...

C-Standardbibliothek - <signal.h>

Weitere Erweiterungen