Provided by: manpages-fr-dev_3.27fr1.4-1_all bug

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> >>.