Provided by:
manpages-es_1.55-10_all 
NOMBRE
getcontext, setcontext - consulta o establece el contexto de usuario
SINOPSIS
#include <ucontext.h>
int getcontext(ucontext_t *ucp);
int setcontext(const ucontext_t *ucp);
DESCRIPCI'ON
En un entorno del tipo SysV, se encuentran los dos tipos mcontext_t y
ucontext_t definidos en <ucontext.h> y las cuatro funciones
getcontext(), setcontext(), makecontext() y swapcontext() que permiten
el intercambio del contexto del nivel de usuario entre multiples hilos
de control dentro de un proceso.
El tipo mcontext_t es dependiente de la maquina y opaco. El tipo
ucontext_t es una estructura que tiene al menos los campos siguientes:
typedef struct ucontext {
struct ucontext *uc_link;
sigset_t uc_sigmask;
stack_t uc_stack;
mcontext_t uc_mcontext;
...
} ucontext_t;
de los cuales sigset_t y stack_t estan definidos en <signal.h>.
uc_link apunta al contexto que sera reanudado cuando termine el
contexto actual (en el caso de que el contexto actual haya sido creado
usando makecontext()), uc_sigmask es el conjunto de senales bloqueadas
en este contexto (vease sigprocmask(2)), uc_stack es la pila usada por
este contexto (vease sigaltstack(2)), y uc_mcontext es la
representacion del contexto guardado especifica de la maquina, que
incluye los registros de la maquina para el hilo invocador.
La funcion getcontext() inicializa la estructura apuntada por ucp al
contexto activo actualmente.
La funcion setcontext() restablece el contexto de usuario apuntado por
ucp. Si la llamada tiene exito no regresa. El contexto deberia haber
sido obtenido mediante una llamada a getcontext(), o makecontext(), o
pasada como tercer argumento al manejador de senales.
Si el contexto se obtuvo mediante una llamada a getcontext(), la
ejecucion del programa continua como si esta llamada simplemente
regresara.
Si el contexto fue obtenido mediante una llamada a makecontext(), la
ejecucion del programa continua por la llamada a la funcion func
especificada como segundo argumento en la llamada a makecontext().
Cuando la funcion func regresa, se continua con el miembro uc_link de
la estructura ucp especificada como primer argumento en la llamada a
makecontext(). Cuando este miembro es NULL, el hilo termina.
Cuando el contexto se obtiene mediante una llamada a un manejador de
senales, se solia decir que "la ejecucion del programa continua con la
instruccion de programa siguiente a la instruccion interrumpida por la
senal". Sin embargo, esta sentencia fue eliminada en SUSv2, y ahora se
establece que "el resultado es indefinido".
VALOR DEVUELTO
Cuando tiene exito,getcontext() devuelve 0 y setcontext() no regresa.
En caso de error, ambas devuelven -1 y modifican errno con el valor
apropiado.
ERRORES
No se definen errores.
OBSERVACIONES
La primera manifestacion de este mecanismo fue el mecanismo
setjmp()/longjmp(). Puesto que no define el manejo del contexto de
senales, el siguiente paso fue el par sigsetjmp()/siglongjmp(). El
presente mecanismo proporciona mucho mas control. Por otra parte, no
hay un metodo sencillo de detectar si un regreso de getcontext() es de
la primera llamada o via una llamada a setcontext(). El usuario tiene
que inventar su propio mecanismo de `contabilidad' y no se servira una
variable de tipo registro ya que los registros se restauran.
Cuando ocurre una senal, el contexto de usuario actual se guarda y el
nucleo crea un nuevo contexto para el manejador de senales. No deje al
manejador usar longjmp() - es indefinido que ocurriria con contextos.
Use siglongjmp() o setcontext() en su lugar.
CONFORME A
SUSv2
V'EASE TAMBI'EN
sigaction(2), sigaltstack(2), sigprocmask(2), longjmp(3), sigsetjmp(3),
makecontext(3)