Man Linux: Main Page and Category List

NAME

       longjmp - non-local goto

SYNOPSIS

       #include <setjmp.h>

       void longjmp(jmp_buf env, int val);

DESCRIPTION

       The  longjmp() function shall restore the environment saved by the most
       recent  invocation  of  setjmp()  in  the   same   thread,   with   the
       corresponding  jmp_buf  argument. If there is no such invocation, or if
       the function containing  the  invocation  of  setjmp()  has  terminated
       execution  in  the interim, or if the invocation of setjmp() was within
       the scope of an identifier with variably modified  type  and  execution
       has  left that scope in the interim, the behavior is undefined.   It is
       unspecified whether longjmp() restores  the  signal  mask,  leaves  the
       signal mask unchanged, or restores it to its value at the time setjmp()
       was called.

       All accessible objects have values, and all  other  components  of  the
       abstract  machine  have state (for example, floating-point status flags
       and open files), as of the time longjmp() was called, except  that  the
       values of objects of automatic storage duration are unspecified if they
       meet all the following conditions:

        * They are local to the function containing the corresponding setjmp()
          invocation.

        * They do not have volatile-qualified type.

        * They are changed between the setjmp() invocation and longjmp() call.

       As it bypasses the usual function call and return mechanisms, longjmp()
       shall  execute correctly in contexts of interrupts, signals, and any of
       their associated functions. However, if longjmp()  is  invoked  from  a
       nested  signal handler (that is, from a function invoked as a result of
       a signal raised during the handling of another signal), the behavior is
       undefined.

       The  effect  of a call to longjmp() where initialization of the jmp_buf
       structure was not performed in the calling thread is undefined.

RETURN VALUE

       After longjmp() is completed, program execution  continues  as  if  the
       corresponding  invocation  of  setjmp()  had  just  returned  the value
       specified by val. The longjmp() function shall not  cause  setjmp()  to
       return 0; if val is 0, setjmp() shall return 1.

ERRORS

       No errors are defined.

       The following sections are informative.

EXAMPLES

       None.

APPLICATION USAGE

       Applications  whose  behavior  depends  on the value of the signal mask
       should not use longjmp() and setjmp(), since their effect on the signal
       mask  is  unspecified,  but  should  instead  use  the siglongjmp() and
       sigsetjmp() functions (which can save and restore the signal mask under
       application control).

RATIONALE

       None.

FUTURE DIRECTIONS

       None.

SEE ALSO

       setjmp()  ,  sigaction()  ,  siglongjmp()  ,  sigsetjmp()  ,  the  Base
       Definitions volume of IEEE Std 1003.1-2001, <setjmp.h>

COPYRIGHT

       Portions of this text are reprinted and reproduced in  electronic  form
       from IEEE Std 1003.1, 2003 Edition, Standard for Information Technology
       -- Portable Operating System Interface (POSIX),  The  Open  Group  Base
       Specifications  Issue  6,  Copyright  (C) 2001-2003 by the Institute of
       Electrical and Electronics Engineers, Inc and The Open  Group.  In  the
       event of any discrepancy between this version and the original IEEE and
       The Open Group Standard, the original IEEE and The Open Group  Standard
       is  the  referee document. The original Standard can be obtained online
       at http://www.opengroup.org/unix/online.html .