sigsetjmp(3C) sigsetjmp(3C)
NAME
sigsetjmp, siglongjmp - Nichtlokaler Sprung mit Signalstatus
SYNTAX
#include <setjmp.h>
int sigsetjmp(sigjmpbuf env, int savemask);
void siglongjmp(sigjmpbuf env, int val);
BESCHREIBUNG
Mit diesen Funktionen können Fehler und Unterbrechungen innerhalb von
Low-Level-Routinen eines Programms bearbeitet werden.
sigsetjmp() sichert die Register des aufrufenden Prozesses und die
Umgebung [siehe sigaltstack(2)] in env (dessen Typ, sigjmpbuf, in der
Datei setjmp.h definiert wird) zur späteren Verwendung durch
siglongjmp(). Wenn savemask ungleich Null ist, werden die Signalmaske
des aufrufenden Prozesses [siehe sigprocmask(2)] und die Verwaltungs-
parameter [siehe priocntl(2)] ebenfalls gesichert. sigsetjmp() liefert
den Wert 0.
siglongjmp() stellt die im Argument env durch den letzten Aufruf von
sigsetjmp() gesicherte Umgebung wieder her. Nachdem siglongjmp() aus-
geführt wurde, wird das Programm weiter abgearbeitet, als wenn der
entsprechende Aufruf von sigsetjmp() den Wert val zurückgegeben hätte.
siglongjmp() kann sigsetjmp() nicht dazu veranlassen, den Wert 0
zurückzugeben. Wird siglongjmp() mit dem zweiten Argument Null aufge-
rufen, liefert sigsetjmp() den Wert 1.
Alle Objekte, auf die zugegriffen werden kann, haben Werte wie zu der
Zeit, als siglongjmp() aufgerufen wurde. Der Unterschied besteht
darin, daß die Werte von Objekten mit automatischer Speicherdauer, die
für die Funktion mit dem sigsetjmp()-Aufruf lokal sind. Dies ist
allerdings nur dann der Fall, wenn die Werte nicht vom Typ volatile
sind und zwischen den Aufrufen von sigsetjmp() und siglongjmp() verän-
dert werden.
Ein Aufruf von sigsetjmp() darf nur in einem der folgenden Zusammen-
hänge erscheinen:
- dem gesamten Steuerungsausdruck einer Auswahl- oder Iterationsan-
weisung.
- einem Operanden eines relationalen Operators oder Gleichheitsopera-
tors, wenn der andere Operand ein integraler Konsantenausdruck ist.
Als Ergebnis wird der gesamte Steuerungsausdruck einer Auswahl-
oder Iterationsanweisung zurückgegeben.
- einem Operanden eines unären Operators. Als Ergebnis wird der
gesamte Steuerungsausdruck einer Auswahl- oder Iterationsanweisung
zurückgegeben.
Seite 1 Reliant UNIX 5.44 Gedruckt 11/98
sigsetjmp(3C) sigsetjmp(3C)
- dem gesamten Ausdruck einer Ausdrucksanweisung (möglicherweise
Typumwandlung mit dem Cast-Operator nach void).
Wenn eine Signalbehandlungsfunktion den Aufruf sleep() unterbricht und
siglongjmp() aufruft, um eine Umgebung wiederherzustellen, die vor dem
Aufruf von sleep() abgelegt wurde, so ist die Aktion und die Zeit, die
mit SIGALRM verknüpft ist, nicht angegeben. Gleiches gilt, wenn das
Signal SIGALRM blockiert wird, es sei denn, die Signalmaske des Pro-
zesses wird als Teil der jeweiligen Umgebung wiederhergestellt.
Die Funktion siglongjmp() stellt die gesicherte Signalmaske nur dann
wieder her, wenn das Argument env durch den Aufruf von sigsetjmp() mit
dem Argument savemask initialisiert wurde, welches ungleich Null ist.
HINWEISE
Wenn siglongjmp() aufgerufen wird, obwohl env nicht durch sigsetjmp()
initialisiert wurde, oder wenn der letzte derartige Aufruf in einer
Funktion stattfand, deren Ausführung inzwischen beendet ist, wird
absolutes Chaos garantiert.
SIEHE AUCH
getcontext(2), priocntl(2), sigaction(2), sigaltstack(2),
sigprocmask(2), setjmp(3C).
Seite 2 Reliant UNIX 5.44 Gedruckt 11/98