Your Browser is not longer supported

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

{{viewport.spaceProperty.prod}}

sigsetjmp - Marke für nichtlokalen Sprung durch Signal setzen

&pagelevel(4)&pagelevel

Definition

#include <setjmp.h>

int sigsetjmp(sigjmp_buf env, int savemask);

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.

Returnwert

0

wenn die Rückkehr von einer unmittelbaren Ausführung von sigsetjmp() erfolgt.

 

!= 0

wenn die Rückkehr von einem siglongjmp()-Aufruf erfolgt.

Hinweis

Der Unterschied zwischen setjmp()/longjmp() und sigsetjmp()/siglongjmp() ist nur für solche Programme von Bedeutung, die sigaction(), sigprocmask() oder sigsuspend() verwenden.

Siehe auch

auch siglongjmp(), signal(), sigprocmask(), sigsuspend(), setjmp.h, Abschnitt "Signale“.