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