Seitenleiste

Wiki

Community

Funktionen

Definitionen

Datentypen

signal()

signal() ist definiert in der signal, die in C über signal.h, bzw. in C++ über csignal eingebunden wird.

Achtung: Es wird aus Portabilitätsgründen strengstens von signal() abgeraten, stattdessen sollte die POSIX-Funktion sigaction verwendet werden.

Funktion

signal() definiert eine Funktion, die ein bestimmtes Signal behandelt.

Dabei wird ein Makro übergeben, das die Art des Signals angibt und eine Funktion die das jeweilige Signal behandelt:

signal( SIGINT, &sigIntHandler );

Signatur

#include <signal.h>
void ( *signal( int sig, void ( *func )( int ) ) )( int );

sig: Das zu behandelnde Signal
Rückgabewert: Ein Funktionszeiger auf die zuvor gesetzte Handler-Funktion für sig. Bei einem Fehler wird SIG_ERR zurück gegeben.

Für sig stehen dabei folgende Makros zur Verfügung:

Name Signal Bedeutung
SIGABRT Abort Wird durch abort() ausgelöst
SIGFPE Floating-Point Exception Ungültigen Berechnung (z.B. Division durch 0)
SIGILL Illegal Instruction Fehler bei der Programmausführung
SIGINT Interrupt Wird ausgelöst, wenn das Programm gestoppt werden soll (z.B. durch Strg+C)
SIGSEGV Segmentation Violation Speicherzugriffsfehler
SIGTERM Terminate Programm soll beendet werden

func muss dabei folgende Signatur haben:

void handler( int parameter );

Alternativ stehen folgende Funktionen zur Verfügung:

Handler Funktion
SIG_DFL Standard-Handler
SIG_IGN Signal wird ignoriert

Beispiel

Folgendes Beispiel setzt einen Signal-Handler für Strg-C:

#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
 
void handleSigInt( int parameter );
 
int main()
{
  signal( SIGINT, &handleSigInt );
  while( 1 )
    getchar();
  return 0;
}
 
 
void handleSigInt( int parameter )
{
  printf( "\nSIGINT wurde augeloest - Programm wird beendet\n" );
  exit( 1 );
}


Ausgabe:

$ ./signal 
a
b
c
d
e
^C
SIGINT wurde augeloest - Programm wird beendet
$ 

Strg+C bricht in diesem Fall die Ausführung nicht automatisch ab. Es wird nur die festgelegte Funktion aufgerufen, die dann eine Ausgabe vornimmt und das Programm manuell beendet.

siehe auch