setjmp, sigsetjmp — save stack context for non-local goto
#include <setjmp.h>
int
setjmp( |
jmp_buf | env); |
int
sigsetjmp( |
sigjmp_buf | env, |
| int | savesigs); |
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 savesigs is non-zero, the set
of blocked signals is saved in env and will be restored if a
siglongjmp(3) is later
performed with this env.
setjmp() and sigsetjmp() return 0 if returning directly,
and non-zero when returning from longjmp(3) using the saved
context.
POSIX does not specify whether setjmp() will save the signal context. (In
System V it will not. In 4.3BSD it will, and there is a
function _setjmp
that will not.) If you want to save signal masks, use
sigsetjmp().
setjmp() and sigsetjmp() make programs hard to
understand and maintain. If possible an alternative should be
used.
|
|