NOMBRE¶
makecontext, swapcontext - manipulan el contexto de usuario
SINOPSIS¶
#include <ucontext.h>
void makecontext(ucontext_t *ucp, void
*func(), int argc, ...);
int swapcontext (ucontext_t *oucp, ucontext_t
*ucp);
DESCRIPCIÓN¶
En un entorno tipo SysV, se definen el tipo
ucontext_t en
<ucontext.h> y las cuatro funciones
getcontext(),
setcontext(),
makecontext() y
swapcontext() que permiten
la conmutación del contexto del nivel de usuario entre múltiples
hilos de control dentro de un proceso.
Para el tipo y las primeras dos funciones, véase
getcontext(2).
La función
makecontext() modifica el puntero apuntado por
ucp (que fue obtenido en una llamada previa a
getcontext()).
Antes de llamar a
makecontext(), se debe reservar una nueva pila para
este contexto, y asignarla a
ucp->uc_stack, y definir un contexto
sucesor, y asignarlo a
ucp->uc_link. Cuando este contexto es
activado más tarde (usando
setcontext() o
swapcontext())
se llama en primer lugar a la función
func, con los argumentos
especificados después de
argc (donde
argc debe contener
el número de estos argumentos), y cuando esta función regresa,
el contexto sucesor es activado. Cuando el contexto sucesor es NULL , el hilo
termina.
La función
swapcontext() salva el contexto actual en la estructura
apuntada por
oucp, y activa el contexto apuntado por
ucp.
VALOR DEVUELTO¶
Cuando tiene éxito,
makecontext() devuelve 0 y
swapcontext() no regresa. (Pero puede regresar más tarde, en el
caso de que
oucp sea activado, en cuyo caso devuelve 0 como
swapcontext().) En caso de error, ambas devuelven -1 y modifican
errno con el valor apropiado.
ERRORES¶
- ENOMEM
- No queda suficiente espacio en la pila.
OBSERVACIONES¶
La interpretación de
ucp->uc_stack es como en
sigaltstack(2), a saber, esta estructura contiene el comienzo y la
longitud de un área de memoria a ser usada como pila, sea cual sea la
dirección de crecimiento de la pila. Por lo tanto, no es necesario que
los programas de usuario se preocupen por esta dirección.
SUSv2, POSIX 1003.1-2001.
VÉASE TAMBIÉN¶
getcontext(2),
sigaction(2),
sigaltstack(2),
sigprocmask(2),
sigsetjmp(3)