getcontext, setcontext - get and set current user context


#include <ucontext.h>

int getcontext(ucontext_t *ucp);

int setcontext(const ucontext_t *ucp);


The getcontext() function initializes the structure pointed to by ucp to
the current user context of the calling process. The ucontext_t type
that ucp points to defines the user context and includes the contents of
the calling process' machine registers, the signal mask, and the current
execution stack.

The setcontext() function restores the user context pointed to by ucp. A
successful call to setcontext() does not return; program execution
resumes at the point specified by the ucp argument passed to
setcontext(). The ucp argument should be created either by a prior call
to getcontext(), or by being passed as an argument to a signal handler.
If the ucp argument was created with getcontext(), program execution
continues as if the corresponding call of getcontext() had just returned.
If the ucp argument was created with makecontext(3C), program execution
continues with the function passed to makecontext(3C). When that
function returns, the process continues as if after a call to
setcontext() with the ucp argument that was input to makecontext(3C). If
the ucp argument was passed to a signal handler, program execution
continues with the program instruction following the instruction
interrupted by the signal. If the uc_link member of the ucontext_t
structure pointed to by the ucp argument is equal to 0, then this context
is the main context, and the process will exit when this context returns.
The effects of passing a ucp argument obtained from any other source are


On successful completion, setcontext() does not return and getcontext()
returns 0. Otherwise, -1 is returned.


No errors are defined.


When a signal handler is executed, the current user context is saved and
a new context is created. If the thread leaves the signal handler via
longjmp(3C), then it is unspecified whether the context at the time of
the corresponding setjmp(3C) call is restored and thus whether future
calls to getcontext() will provide an accurate representation of the
current context, since the context restored by longjmp(3C) may not
contain all the information that setcontext() requires. Signal handlers
should use siglongjmp(3C) instead.

Portable applications should not modify or access the uc_mcontext member
of ucontext_t. A portable application cannot assume that context
includes any process-wide static data, possibly including errno. Users
manipulating contexts should take care to handle these explicitly when


See attributes(7) for descriptions of the following attributes:

|Interface Stability | Standard |


sigaction(2), sigaltstack(2), sigprocmask(2), bsd_signal(3C),
makecontext(3C), setjmp(3C), sigsetjmp(3C), ucontext.h(3HEAD),
attributes(7), standards(7)

May 13, 2017 GETCONTEXT(2)