Beschreibung | sigsetjmp() ist als Makro implementiert und sichert seine Aufrufumgebung in sein Argument env für eine spätere Benutzung durch die Funktion siglongjmp() .
Wenn der Wert von savemask ungleich 0 ist, sichert sigsetjmp() auch die aktuelle Signalmaske des Prozesses als einen Teil der Aufrufumgebung. Bei der Verwendung von setjmp() ginge diese verloren. Alle zugreifbaren Objekte besitzen die Werte, die sie zum Zeitpunkt des Aufrufs vonlongjmp() besaßen, mit Ausnahme der Werte von automatischen Objekten. Diese sind unter folgenden Bedingungen undefiniert: Sie sind lokal zu der Funktion, die den entsprechenden setjmp -Aufruf enthält. Sie sind nicht vom Typ volatile . Sie wurden zwischen dem setjmp - und dem longjmp -Aufruf geändert.
sigsetjmp() darf nur in einem der folgenden Zusammenhänge aufgerufen werden:
als vollständiger Bedingungsausdruck einer Auswahl- oder Schleifenanweisung, z.B.: if (sigsetjmp(env, mask)) ...
als Operand eines Vergleichsoperators, wobei der andere Operand ein konstanter ganzzahliger Ausdruck und der Gesamtausdruck der vollständige Bedingungsausdruck einer Auswahl- oder Schleifenanweisung ist, z.B: if (sigsetjmp(env, mask)==0) ...
als Operand des einstelligen Operators !, wobei der Gesamtausdruck der vollständige Bedingungsausdruck einer Auswahl- oder Schleifenanweisung ist, z.B: if (!sigsetjmp(env, mask) ...
als vollständiger Ausdruck einer Ausdrucksanweisung (ggf. umgewandelt in den Typ (void) , z.B: (void) sigsetjmp(env, mask);
Werden Threads verwendet, so wirkt sich die Funktion auf den Prozess oder auf einen Thread wie folgt aus: Wenn der Wert von savemask ungleich 0 ist, sichert sigsetjmp() auch die aktuelle Signalmaske des aufrufenden Threads als einen Teil der Aufrufumgebung. |
Siehe auch | auch siglongjmp() , signal() , sigprocmask() , sigsuspend() , setjmp.h , Abschnitt "Signale“. |