These functions are useful for implementing user-level context switching between multiple threads of control within a process.
The makecontext() function modifies the context specified by ucp, which has been initialized using getcontext. When this context is resumed using swapcontext() or setcontext() (see getcontext(2)), program execution continues by calling the function func, passing it the arguments that follow argc in the makecontext() call.
Before a call is made to makecontext(), the context being modified should have a stack allocated for it. The value of argc must match the number of integer arguments passed to func, otherwise the behavior is undefined.
The uc_link member is used to determine the context that will be resumed when the context being modified by makecontext() returns. The uc_link member should be initialized prior to the call to makecontext().
The swapcontext() function saves the current context in the context structure pointed to by oucp and sets the context to the context structure pointed to by ucp.