70 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Groff
		
	
	
	
	
	
			
		
		
	
	
			70 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Groff
		
	
	
	
	
	
.TH SETJMP 3	"June 22, 2006"
 | 
						|
.UC 4
 | 
						|
.SH NAME
 | 
						|
setjmp, longjmp, _setjmp, _longjmp, sigsetjmp, siglongjmp \- save and restore execution contexts
 | 
						|
.SH SYNOPSIS
 | 
						|
.nf
 | 
						|
.ft B
 | 
						|
#include <setjmp.h>
 | 
						|
 | 
						|
int setjmp(jmp_buf env);
 | 
						|
void longjmp(jmp_buf env, int val);
 | 
						|
 | 
						|
int _setjmp(jmp_buf env);
 | 
						|
void _longjmp(jmp_buf env, int val);
 | 
						|
 | 
						|
#define _POSIX_SOURCE
 | 
						|
int sigsetjmp(sigjmp_buf env, int savemask);
 | 
						|
void siglongjmp(sigjmp_buf env, int val);
 | 
						|
.SH DESCRIPTION
 | 
						|
These calls provide a way for a process to save an execution context into a
 | 
						|
buffer, and later resume execution from that context, effectively performing
 | 
						|
a non-local jump. The
 | 
						|
.B setjmp
 | 
						|
family of functions store the context into the \fIenv\fP data structure,
 | 
						|
and return the value 0. The
 | 
						|
.B longjmp
 | 
						|
family of functions jump to the context saved in the given \fIenv\fP data
 | 
						|
structure, causing the process to continue as if it returned from the
 | 
						|
corresponding
 | 
						|
.B setjmp
 | 
						|
call again, but this time with the non-zero return value in \fIval\fP.
 | 
						|
.PP
 | 
						|
The difference between the three pairs of setjmp/longjmp functions lies in the
 | 
						|
behaviour with respect to saving/restoring the process signal mask. POSIX does
 | 
						|
not require the process signal mask to be saved and restored during
 | 
						|
.B setjmp
 | 
						|
/
 | 
						|
.B longjmp
 | 
						|
\. However, the current implementation does this in order to agree with OSF/1
 | 
						|
and other BSD derived systems.
 | 
						|
.PP
 | 
						|
The pair of functions
 | 
						|
.B _setjmp
 | 
						|
/
 | 
						|
.B _longjmp
 | 
						|
, traditional in BSD systems, may be used when the signal mask is not to be
 | 
						|
saved/restored.
 | 
						|
.PP
 | 
						|
Finally, the POSIX
 | 
						|
.B sigsetjmp
 | 
						|
/
 | 
						|
.B siglongjmp
 | 
						|
functions allow the programmer to specify explicitly whether the signal mask
 | 
						|
is to be saved/restored, by means of the \fIsavemask\fP parameter. If this
 | 
						|
parameter is zero, the signal mask will not be saved/restored, otherwise it
 | 
						|
will.
 | 
						|
.SH NOTES
 | 
						|
After the function calling
 | 
						|
.B setjmp
 | 
						|
has returned, the saved context may not be used in a call to
 | 
						|
.B longjmp
 | 
						|
anymore, since the relevant portion of the stack may already have been wiped
 | 
						|
out at that point.
 | 
						|
.PP
 | 
						|
Using these functions to return to a previous state from a signal handler
 | 
						|
is possible but should be done with extreme care, as some interrupted library
 | 
						|
routines may not be reentrant and/or temporarily allocate resources. 
 | 
						|
.PP
 | 
						|
See the setjmp.h header file for more implementation details specific to Minix.
 |