setjmp(3) Stapelspeicher-Zusammenhang für nicht lokale Verzweigung sichern

ÜBERSICHT

#include <setjmp.h>

int setjmp(jmp_buf env);
int sigsetjmp(sigjmp_buf env, int savesigs);

Mit Glibc erforderliche Makros (siehe feature_test_macros(7)):

setjmp(): siehe ANMERKUNGEN
sigsetjmp(): _POSIX_C_SOURCE >= 1 || _XOPEN_SOURCE || _POSIX_C_SOURCE

BESCHREIBUNG

setjmp() und longjmp(3) sind nützlich für die Behandlung von Fehlern und Unterbrechungen, die in einem Unterprogramm niedriger Stufe eines Programms auftreten. setjmp() sichert den Stapelspeicher-Zusammenhang bzw. die Stapelspeicher-Umgebung in env für spätere Benutzung durch longjmp(3). Der Stapelspeicher-Zusammenhang wird ungültig, wenn die Funktion, die setjmp() aufgerufen hat, beendet wird.

sigsetjmp() ist setjmp() ähnlich. Nur wenn savesigs nicht Null ist, wird die aktuelle Signalmaske des Prozesses in env gespeichert und wiederhergestellt, wenn später mit diesem env ein siglongjmp(3) durchgeführt wird.

RÜCKGABEWERT

setjmp() und sigsetjmp() geben 0 zurück, falls sie sofort zurückkehren, und nicht Null, wenn sie von longjmp(3) oder siglongjmp(3) zurückkehren und den gesicherten Zusammenhang benutzen.

KONFORM ZU

C89, C99 und POSIX.1-2001 spezifizieren setjmp(). POSIX.1-2001 spezifiziert sigsetjmp().

ANMERKUNGEN

POSIX spezifiziert nicht, ob setjmp() die Signalmaske sichern wird (um sie später während longjmp(3) wieder herzustellen). In System-V wird es dies nicht tun. In 4.3BSD wird es dies tun und dort gibt es eine Funktion _setjmp, die es nicht tut. Unter Linux mit Glibc-Versionen vor 2.19 folgte setjmp() standardmäßig dem Verhalten von System V, aber das BSD-Verhalten wird bereitgestellt, wenn das _BSD_SOURCE-Feature-Test-Macro definiert ist und weder _POSIX_SOURCE, _POSIX_C_SOURCE, _XOPEN_SOURCE, _XOPEN_SOURCE_EXTENDED, _GNU_SOURCE noch _SVID_SOURCE definiert ist. Seit Glibc 2.19 stellt <setjmp.h> nur die System-V-Version von setjmp() bereit. Programme, die die BSD-Semantik benötigen, sollten Aufrufe von setjmp() durch Aufrufe von sigsetjmp(), bei denen das Argument savesigs ungleich numerisch Null ist, ersetzen.

Falls Sie portable Signalmasken für das Speichern und Wiederherstellen möchten, benutzen Sie sigsetjmp() und siglongjmp(3).

setjmp() und sigsetjmp() erschweren das Verständnis und die Verwaltung von Programmen. Falls möglich, sollte eine Alternative benutzt werden.

KOLOPHON

Diese Seite ist Teil der Veröffentlichung 3.74 des Projekts Linux-man-pages. Eine Beschreibung des Projekts, Informationen, wie Fehler gemeldet werden können sowie die aktuelle Version dieser Seite finden sich unter http://www.kernel.org/doc/man-pages/.

ÜBERSETZUNG

Die deutsche Übersetzung dieser Handbuchseite wurde von Patrick Rother <[email protected]> und Chris Leick <[email protected]> erstellt.

Diese Übersetzung ist Freie Dokumentation; lesen Sie die GNU General Public License Version 3 oder neuer bezüglich der Copyright-Bedingungen. Es wird KEINE HAFTUNG übernommen.

Wenn Sie Fehler in der Übersetzung dieser Handbuchseite finden, schicken Sie bitte eine E-Mail an <[email protected]>.