Your Browser is not longer supported

Please use Google Chrome, Mozilla Firefox or Microsoft Edge to view the page correctly
Loading...

{{viewport.spaceProperty.prod}}

sigstack - alternativen Stack für Signal setzen oder abfragen

&pagelevel(4)&pagelevel

Definition

#include <signal.h>

int sigstack (struct sigstack *ss, struct sigstack *oss);

Beschreibung

Mit sigstack() können Benutzer einen alternativen Stack definieren, der als Signal-Stack bezeichnet wird und in dem die Signale verarbeitet werden. Wenn durch die Aktion eines Signals angezeigt wird, dass die Bearbeitungsroutine in einem Signal-Stack ausgeführt werden soll (angegeben mit einem Aufruf von sigaction()), prüft das System, ob der Prozess derzeit in diesem Stack ausgeführt wird. Wird der Prozess nicht im Signal-Stack ausgeführt, schaltet das System so lange in den Signal-Stack um, bis die Routine zur Signalbearbeitung beendet ist.

Ein Signal-Stack wird durch eine sigstack-Struktur angegeben, die folgende Elemente enthält:

char *ss_sp; /* pointer of signal stack */

int ss_onstack; /* current status */

ss_sp ist die Anfangsadresse des Stacks. Ist das Feld ss_onstack ungleich null, so soll der Signal-Stack aktiviert werden.

Ist ss kein Nullzeiger, setzt sigstack() den Status des Signal-Stack auf den Wert in der sigstack-Struktur, auf den ss zeigt. Die Länge des Stack muss mindestens SIGSTKSZ Bytes betragen. Ist ss_onstack nicht null, geht das System davon aus, dass der Prozess im Si-gnal-Stack ausgeführt wird. Ist ss ein Nullzeiger, bleibt der Status des Signal-Stack unverändert. Ist oss kein Nullzeiger, wird der aktuelle Status des Signal-Stack in der sigstack-Struktur, auf die oss zeigt, gespeichert.

Returnwert

0

bei Erfolg.

 

-1

bei Fehler. Es wird errno gesetzt, um den Fehler anzuzeigen.

Fehler

sigstack() schlägt fehl, wenn gilt:


EPERM

Es wurde der Versuch gemacht, einen aktiven Stack zu verändern

Hinweise

Signal-Stacks werden nicht automatisch vergrößert, wie dies bei normalen Stacks der Fall ist. Wenn der Signal-Stack überläuft, können daher unerwartete Ergebnisse auftreten.

Eine portierbare Anwendung sollte sigaltstack() statt sigstack() verwenden.

Programme sollten eine Signalbehandlungs-Routine nicht mit longjmp() beenden, wenn diese in einem Stack abläuft, der mit sigstack() eingerichtet wurde. Unter Umständen wird dieser Stack für die weitere Verwendung unbrauchbar. Es wird daher empfohlen für diesen Fall die Funktionen siglongjmp(), setcontext() oder swapcontext() zu verwenden.