Museum

Home

Lab Overview

Retrotechnology Articles

Online Manuals

⇒ sigsetjmp(3C) — Reliant UNIX 5.44c4

Media Vault

Software Library

Restoration Projects

Artifacts Sought

Related Articles

getcontext(2)

priocntl(2)

sigaction(2)

sigaltstack(2)

sigprocmask(2)

setjmp(3C)

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

Typewritten Software • bear@typewritten.org • Edmonds, WA 98026