LONGJMP
Section: Linux Programmer's Manual (3)
Updated: 2009-01-13
Index
Return to Main Contents
NAME
longjmp, siglongjmp - non-local jump to a saved stack context
SYNOPSIS
#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
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 non-zero savesigs flag,
siglongjmp()
also restores the signal mask that was saved by
sigsetjmp(3).
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 (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:
- *
-
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.
SEE ALSO
setjmp(3),
sigsetjmp(3)
COLOPHON
This page is part of release 3.22 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/.