home   contributing   bugs   download   online pages  

NAME | SYNOPSIS | DESCRIPTION | RETURN VALUE | CONFORMING TO | NOTES | SEE ALSO | COLOPHONThe Linux Programming Interface


LONGJMP(3)                    Linux Programmer's Manual                    LONGJMP(3)

NAME         top

       longjmp, siglongjmp - nonlocal jump to a saved stack context

SYNOPSIS         top

       #include <setjmp.h>

       void longjmp(jmp_buf env, int val);

       void siglongjmp(sigjmp_buf env, int val);

   Feature Test Macro Requirements for glibc (see feature_test_macros(7)):

       siglongjmp(): _POSIX_C_SOURCE >= 1 || _XOPEN_SOURCE || _POSIX_C_SOURCE

DESCRIPTION         top

       longjmp() and setjmp(3) are useful for dealing with errors and interrupts
       encountered in a low-level subroutine of a program.  longjmp() restores the
       environment saved by the last call of setjmp(3) with the corresponding env
       argument.  After longjmp() is completed, program execution continues as if the
       corresponding call of setjmp(3) had just returned the value val.  longjmp()
       cannot cause 0 to be returned.  If longjmp() is invoked with a second argument
       of 0, 1 will be returned instead.

       siglongjmp() is similar to longjmp() except for the type of its env argument.
       If, and only if, the sigsetjmp(3) call that set this env used a nonzero
       savesigs flag, siglongjmp() also restores the signal mask that was saved by
       sigsetjmp(3).

RETURN VALUE         top

       These functions never return.

CONFORMING TO         top

       C89, C99, and POSIX.1-2001 specify longjmp().  POSIX.1-2001 specifies
       siglongjmp().

NOTES         top

       POSIX does not specify whether longjmp() will restore the signal context (see
       setjmp(3) for some more details).  If you want to portably save and restore
       signal masks, use sigsetjmp() and siglongjmp().

       The values of automatic variables are unspecified after a call to longjmp() if
       they meet all the following criteria:

       o  they are local to the function that made the corresponding setjmp(3) call;

       o  their values are changed between the calls to setjmp(3) and longjmp(); and

       o  they are not declared as volatile.

       Analogous remarks apply for siglongjmp().

       longjmp() and siglongjmp() make programs hard to understand and maintain.  If
       possible an alternative should be used.

SEE ALSO         top

       setjmp(3), sigsetjmp(3)

COLOPHON         top

       This page is part of release 3.32 of the Linux man-pages project.  A
       description of the project, and information about reporting bugs, can be found
       at http://www.kernel.org/doc/man-pages/.

                                      2009-01-13                           LONGJMP(3)

HTML rendering created 2010-12-03 by Michael Kerrisk, author of The Linux Programming Interface

customisable
counter