Your Browser is not longer supported

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

{{viewport.spaceProperty.prod}}

siglongjmp - nichtlokalen Sprung durch Signal ausführen

&pagelevel(4)&pagelevel

Definition

#include <setjmp.h>

void siglongjmp(sigjmp_buf env, int val);

Beschreibung

siglongjmp() stellt die Umgebung wieder her, die vom letzten sigsetjmp-Aufruf mit demselben sigjmp_buf-Argument im selben Prozess aufgerufen wurde. Wenn vorher sigsetjmp() nicht aufgerufen wird oder die Funktion, in der dieses Makro aufgerufen wurde in der Zwischenzeit beendet wurde, so ist das Verhalten nicht definiert.

Alle zugreifbaren Objekte besitzen dieselben Werte wie zu dem Zeitpunkt, als siglongjmp() aufgerufen wurde, mit der Ausnahme, dass die Werte von automatischen Objekten, die zwischen der Ausführung von sigsetjmp() und dem Aufruf von siglongjmp() geändert wurden, unbestimmt sind.

Da siglongjmp() den normalen Funktionsaufruf- und -Rückkehrmechanismus verwendet, läuft diese Funktion auch im Zusammenhang mit Unterbrechungen, Signalen und den damit zusammenhängenden Funktionen korrekt ab. Trotzdem gilt, dass das Verhalten nicht definiert ist, wenn siglongjmp() von einer verschachtelten Signalbehandlungs-Funktion aus aufgerufen wird (d.h. von einer Funktion die auf Grund eines Signals aus einer anderen Signalbehandlungsfunktion heraus aufgerufen wurde).

siglongjmp() stellt die gesicherte Signalmaske nur dann wieder her, wenn und nur wenn das Argument env durch einen Aufruf von sigsetjmp() mit einem Argument savemask ungleich 0 initialisiert wurde.

siglongjmp() ist nicht threadsicher. Das Ergebnis eines Aufrufs dieser Funktion ist undefiniert, wenn die Struktur jmp_buf nicht im aufrufenden Thread initialisiert wurde.

Returnwert

-

Nachdem siglongjmp() beendet ist, setzt die Ausführung des Programms so fort, als ob die zugehörige Ausführung des Makros sigsetjmp() soeben mit dem durch val angegebenen Wert beendet worden wäre. siglongjmp() kann sigsetjmp() nicht veranlassen, den Wert 0 zurückzugeben.

Hinweise

Wenn val gleich 0 ist, dann liefert das entsprechende Makro sigsetjmp() den Wert 1. Der Unterschied zwischen setjmp() oder longjmp() und sigsetjmp() oder siglongjmp() ist nur für solche Programme von Bedeutung, die die Funktionen sigaction(), sigprocmask() oder sigsuspend() verwenden.

Siehe auch

longjmp(), setjmp(), sigprocmask(), sigsetjmp(), sigsuspend(), setjmp.h.