sigsetjmp, siglongjmp - Save and restores the current execution
context
#include <setjmp.h>
int sigsetjmp(
sigjmp_buf environment,
int savemask ); void siglongjmp(
sigjmp_buf environment,
int value );
Standard C Library (libc)
Interfaces documented on this reference page conform to
industry standards as follows:
siglongjmp(), sigsetjmp(): XPG4, XPG4-UNIX
Refer to the standards(5) reference page for more information
about industry standards and associated tags.
Specifies an address for a sigjmp_buf structure. Specifies
whether the current signal mask should be saved. If
this parameter contains a 0 (zero) value, sigsetjmp() does
not save the signal mask. Otherwise, the function saves
the signal mask. Specifies the value you want written to
the execution context as the return value of the
sigsetjmp() function. If you specify 0 (zero) in this
parameter, the execution context contains a value of 1 as
the sigsetjmp() return value. See the RETURN VALUES section
for more information.
The sigsetjmp() and siglongjmp() functions are useful when
handling errors and interrupts encountered in low-level
functions of a program.
The sigsetjmp() function saves the current stack context
in the buffer specified by the environment parameter. If
the value of the savemask parameter is not 0 (zero), the
sigsetjmp() function also saves the process' current signal
mask as part of the calling environment.
You use the buffer specified by the environment parameter
in a later call to the siglongjmp() function. The siglongjmp()
function restores the stack context and (optionally)
signal mask that were saved by the sigsetjmp() function.
After the siglongjmp() function runs, program execution
continues as if the corresponding call to the sigsetjmp()
function had just returned the value of the value parameter.
The function that called the sigsetjmp() function
must not have returned before the completion of the siglongjmp()
function.
Because it bypasses the usual function call and return
mechanisms, the siglongjmp() function executes correctly
in contexts of interrupts, signals, and any of their associated
functions. However, if the siglongjmp() function 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.
After the siglongjmp() function is finished executing,
program execution continues as if the corresponding call
of the sigsetjmp() function just returned. In other words,
the execution context saved by the corresponding
sigsetjmp() function is in place and execution continues
at the statement immediately following the call to the
sigsetjmp() function.
Part of that execution context is the return value from
the sigsetjmp() function. When the sigsetjmp() function
actually returns (before the call to the siglongjmp()
function), that return value is 0 (zero). When the siglongjmp()
function returns, the execution context contains
a non-zero value as the return value from the sigsetjmp()
function.
The value you specify in the value parameter to the siglongjmp()
function is written to the execution context as
the return value for the sigsetjmp() function. You cannot
cause the execution context to contain a 0 (zero) value
for the sigsetjmp() return value. If you specify 0 in the
value parameter, the execution context contains a 1 as the
sigsetjmp() return value.
The results of the siglongjmp() function are undefined if
one of the following is true: The siglongjmp() function is
called with an environment parameter that was not previously
set by the sigsetjmp() function The function that
made the corresponding call to the sigsetjmp() function
has already returned.
If the siglongjmp() function detects one of these conditions,
it calls the longjmperror() function. If longjmperror()
returns, the program is aborted. The default version
of longjmperror() displays an error message to standard
error and returns. If you want your program to exit more
gracefully, you can write your own version of the longjmperror()
program.
Routines: setjmp(3)
Standards: standards(5)
sigsetjmp(3)
[ Back ] |