Provided by: manpages-dev_4.04-2_all bug

NAME

       setjmp, sigsetjmp - save stack context for nonlocal goto

SYNOPSIS

       #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

DESCRIPTION

       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.

RETURN VALUE

       setjmp() and sigsetjmp() return 0 if returning directly, and nonzero when returning  from  longjmp(3)  or
       siglongjmp(3) using the saved context.

ATTRIBUTES

       For an explanation of the terms used in this section, see attributes(7).
       ┌───────────────────────┬───────────────┬─────────┐
       │ InterfaceAttributeValue   │
       ├───────────────────────┼───────────────┼─────────┤
       │ setjmp(), sigsetjmp() │ Thread safety │ MT-Safe │
       └───────────────────────┴───────────────┴─────────┘

CONFORMING TO

       setjmp(): POSIX.1-2001, POSIX.1-2008, C89, C99.

       sigsetjmp(): POSIX.1-2001, POSIX.1-2008.

NOTES

       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.

SEE ALSO

       longjmp(3), siglongjmp(3)

COLOPHON

       This  page  is  part  of  release  4.04  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/.

                                                   2015-08-08                                          SETJMP(3)