COHERENT manpages

This page displays the COHERENT manpage for setjmp() [Save machine state for non-local goto].

List of available manpages
Index


setjmp() -- General Function (libc)

Save machine state for non-local goto
#include <setjmp.h>
int setjmp(env) jmp_buf env;

The function call is the only mechanism that C provides to transfer control
between  functions.   This  mechanism,  however,  is  inadequate  for  some
purposes, such as handling  unexpected errors or interrupts at lower levels
of a  program.  To answer  this need, setjmp  helps to provide  a non-local
goto facility.   setjmp() saves a  stack context in env,  and returns value
zero.  The  stack context can be restored with  the function longjmp(). The
type declaration  for jmp_buf is in the header  file setjmp.h.  The context
saved includes the program counter, stack pointer, and stack frame.

Example

The following gives a simple example of setjmp() and longjmp().

#include <setjmp.h>
#include <stdio.h>

jmp_buf env;    /* place for setjmp to store its environment */

main()
{
    int rc;

    if(rc = setjmp(env)) { /* we come here on return */
        printf("First char was %c\n", rc);
        exit(EXIT_SUCCESS);
    }
    subfun();   /* this never returns */
}

subfun()
{
    char buf[80];

    do {
        printf("Enter some data\n");
        gets(buf);  /* get data */
    } while(!buf[0]);   /* retry on null line */

    longjmp(env, buf[0]);   /* buf[0] must be non zero */
}

See Also

getenv(),
libc,
longjmp(),
sigsetjmp()
ANSI Standard, §7.6.1.1
POSIX Standard, §8.1

Notes

Programmers should note that many user-level routines cannot be interrupted
and  reentered  safely.  For  that  reason, improper  use  of setjmp()  and
longjmp()  can  create  mysterious and  irreproducible  bugs.   The use  of
longjmp() to  exit interrupt exception  or signal handlers  is particularly
hazardous.