Provided by:
manpages-fr-dev_3.27fr1.4-1_all 
NOM
getcontext, setcontext - Lire ou ecrire le contexte utilisateur
SYNOPSIS
#include <ucontext.h>
int getcontext(ucontext_t *ucp);
int setcontext(const ucontext_t *ucp);
DESCRIPTION
Dans un environnement de type System V, il existe deux types mcontext_t
et ucontext_t definis dans <ucontext.h> et les quatre fonctions
getcontext(), setcontext(), makecontext(3) et swapcontext(3), qui
permettent le changement de contexte au niveau utilisateur entre
plusieurs fils de controle au sein du meme processus (threads).
Le type mcontext_t est opaque et depend de la machine. Le type
ucontext_t est une structure ayant au moins les champs suivants :
typedef struct ucontext {
struct ucontext *uc_link;
sigset_t uc_sigmask;
stack_t uc_stack;
mcontext_t uc_mcontext;
...
} ucontext_t;
Les types sigset_t et stack_t sont definis dans <signal.h>. Ici,
uc_link pointe sur le contexte qui doit etre restaure lorsque le
contexte courant se terminera (si le contexte en cours a ete cree par
makecontext(3)), uc_sigmask est l'ensemble des signaux bloques dans ce
contexte (consultez sigprocmask(2)), uc_stack est la pile utilisee par
ce contexte (consultez sigaltstack(2)), et uc_mcontext est la
representation -- dependant de la machine -- du contexte sauvegarde,
qui inclut les registres du processeur pour le thread appelant.
La fonction getcontext() remplit la structure pointee par ucp avec le
contexte actuellement actif.
La fonction setcontext() restaure le contexte utilisateur pointe par
ucp. Un appel reussi ne revient pas. Le contexte doit avoir ete obtenu
par un appel getcontext(), ou makecontext(3), ou passe en troisieme
argument a un gestionnaire de signal.
Si le contexte a ete obtenu par un appel getcontext(), l'execution du
programme reprend comme si cet appel venait juste de se terminer.
Si le contexte a ete obtenu par un appel makecontext(3), l'execution du
programme continue par l'appel de la fonction func indiquee en second
argument de makecontext(3). Quand la fonction func se termine, on
continue avec le membre uc_link de la structure ucp specifiee en
premier argument de l'appel makecontext(3). Si ce membre est NULL, le
thread se termine.
Si le contexte a ete obtenu lors d'un appel a un gestionnaire de
signal, alors le texte des anciens standards dit que << l'execution du
programme continue avec l'instruction suivant celle qui a ete
interrompue par le signal >>. Toutefois cette phrase a ete supprimee de
SUSv2, et remplacee par "<< le resultat n'est pas specifie >>.
VALEUR RENVOY'EE
Lorsqu'ils reussissent, getcontext() renvoie zero et setcontext() ne
revient pas. En cas d'erreur, ils retournent -1 et remplissent errno
avec le code d'erreur adequat.
ERREURS
Aucune definie.
CONFORMIT'E
SUSv2, POSIX.1-2001. POSIX.1-2008 supprime la specification de
getcontext(), en citant des problemes de portabilite et en recommandant
a la place que les applications soient recrites en utilisant les
threads POSIX.
NOTES
L'incarnation la plus ancienne de ce mecanisme etait constituee de la
paire setjmp(3)/longjmp(3). Comme ils ne precisent pas la gestion des
signaux, l'etape suivante fut sigsetjmp(3)/siglongjmp(3). Le mecanisme
actuel donne plus de controle. En revanche, il n'y a pas de moyen
simple pour savoir si le retour de getcontext() se fait depuis son
premier appel ou par l'intermediaire d'un appel setcontext().
L'utilisateur doit inventer son propre systeme de comptabilisation, et
pas dans un registre car il serait restaure.
Lorsqu'un signal arrive, le contexte utilisateur courant est sauvegarde
et un nouveau contexte est cree par le noyau pour executer le
gestionnaire. N'utilisez pas longjmp(3) dans le gestionnaire, le
comportement est indefini. Utilisez siglongjmp(3) ou setcontext().
VOIR AUSSI
sigaction(2), sigaltstack(2), sigprocmask(2), longjmp(3),
makecontext(3), sigsetjmp(3)
COLOPHON
Cette page fait partie de la publication 3.27 du projet man-pages
Linux. Une description du projet et des instructions pour signaler des
anomalies peuvent etre trouvees a l'adresse
<URL:http://www.kernel.org/doc/man-pages/>.
TRADUCTION
Depuis 2010, cette traduction est maintenue a l'aide de l'outil po4a
<URL:http://po4a.alioth.debian.org/> par l'equipe de traduction
francophone au sein du projet perkamon
<URL:http://perkamon.alioth.debian.org/>.
Christophe Blaess <URL:http://www.blaess.fr/christophe/> (1996-2003),
Alain Portal <URL:http://manpagesfr.free.fr/> (2003-2006). Julien
Cristau et l'equipe francophone de traduction de Debian (2006-2009).
Veuillez signaler toute erreur de traduction en ecrivant a
<debian-l10n-french@lists.debian.org> ou par un rapport de bogue sur le
paquet manpages-fr.
Vous pouvez toujours avoir acces a la version anglaise de ce document
en utilisant la commande << man -L C <section> <page_de_man> >>.