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 the
sigsetjmp(3)
call that set this
env used a non-zero savesigs flag,
siglongjmp()
also
restores the set of blocked signals.
RETURN VALUE
These functions never return.
CONFORMING TO
C89, C99, and POSIX.1-2001 specify
longjmp().
POSIX.1-2001 specifies
siglongjmp().
NOTES
POSIX does not specify whether
longjmp()
will restore the signal
context.
If you want to save and restore signal masks, use
siglongjmp().
The values of automatic variables are unspecified after a call to
longjmp()
if they meet all the following criteria:
*
they are local to the function that made the corresponding
setjmp(3)
call;
*
their values are changed between the calls to
setjmp(3)
and
longjmp();
and
*
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.
This page is part of release 3.14 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/.