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.
 | 
