SETJMP(3) manual page
Table of Contents
setjmp, sigsetjmp - save stack context for
nonlocal goto
#include <setjmp.h>
int setjmp(jmp_buf env);int sigsetjmp(sigjmp_buf env, int savesigs);
Feature
Test Macro Requirements for glibc (see feature_test_macros(7)
):
setjmp():
see NOTES.
sigsetjmp(): _POSIX_C_SOURCE >= 1 || _XOPEN_SOURCE || _POSIX_C_SOURCE
setjmp()
and longjmp(3)
are useful for dealing with errors and interrupts encountered
in a low-level subroutine of a program. setjmp() saves the stack context/environment
in env for later use by longjmp(3)
. The stack context will be invalidated
if the function which called setjmp() returns.
sigsetjmp() is similar to
setjmp(). If, and only if, savesigs is nonzero, the process’s current signal
mask is saved in env and will be restored if a siglongjmp(3)
is later performed
with this env.
setjmp() and sigsetjmp() return 0 if returning
directly, and nonzero when returning from longjmp(3)
or siglongjmp(3)
using
the saved context.
C89, C99, and POSIX.1-2001 specify setjmp().
POSIX.1-2001 specifies sigsetjmp().
POSIX does not specify whether setjmp()
will save the signal mask (to be later restored during longjmp(3)
). In System
V it will not. In 4.3BSD it will, and there is a function _setjmp that will
not. On Linux with glibc versions before 2.19, setjmp() follows the System
V behavior by default, but the BSD behavior is provided if the _BSD_SOURCE
feature test macro is defined and none of _POSIX_SOURCE, _POSIX_C_SOURCE,
_XOPEN_SOURCE, _XOPEN_SOURCE_EXTENDED, _GNU_SOURCE, or _SVID_SOURCE is
defined. Since glibc 2.19, <setjmp.h> exposes only the System V version of setjmp().
Programs that need the BSD semantics should replace calls to setjmp() with
calls to sigsetjmp() with a nonzero savesigs argument.
If you want to portably
save and restore signal masks, use sigsetjmp() and siglongjmp(3)
.
setjmp()
and sigsetjmp() make programs hard to understand and maintain. If possible,
an alternative should be used.
longjmp(3)
, siglongjmp(3)
This
page is part of release 3.78 of the Linux man-pages project. A description
of the project, information about reporting bugs, and the latest version
of this page, can be found at http://www.kernel.org/doc/man-pages/.
Table of Contents