Provided by: manpages-fr-dev_3.65d1p1-1_all bug

NOM

       getcontext, setcontext - Lire ou écrire 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 définis 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 contrôle au sein du
       même processus (threads).

       Le type mcontext_t est opaque et dépend 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 définis dans <signal.h>. Ici, uc_link pointe sur le contexte qui doit
       être restauré lorsque le contexte courant  se  terminera  (si  le  contexte  en  cours  a  été  créé  par
       makecontext(3)),   uc_sigmask   est   l'ensemble   des   signaux  bloqués  dans  ce  contexte  (consultez
       sigprocmask(2)), uc_stack est la pile utilisée par ce contexte (consultez sigaltstack(2)), et uc_mcontext
       est la représentation — dépendant de la machine — du contexte sauvegardé, qui  inclut  les  registres  du
       processeur pour le thread appelant.

       La fonction getcontext() remplit la structure pointée par ucp avec le contexte actuellement actif.

       La fonction setcontext() restaure le contexte utilisateur pointé par ucp. Un appel réussi ne revient pas.
       Le  contexte  doit  avoir  été obtenu par un appel getcontext(), ou makecontext(3), ou passé en troisième
       argument à un gestionnaire de signal.

       Si le contexte a été obtenu par un appel getcontext(), l'exécution du  programme  reprend  comme  si  cet
       appel venait juste de se terminer.

       Si le contexte a été obtenu par un appel makecontext(3), l'exécution du programme continue par l'appel de
       la  fonction  func  indiquée  en second argument de makecontext(3). Quand la fonction func se termine, on
       continue avec  le  membre  uc_link  de  la  structure  ucp  spécifiée  en  premier  argument  de  l'appel
       makecontext(3). Si ce membre est NULL, le thread se termine.

       Si  le  contexte  a  été  obtenu  lors d'un appel à un gestionnaire de signal, alors le texte des anciens
       standards dit que « l'exécution du  programme  continue  avec  l'instruction  suivant  celle  qui  a  été
       interrompue  par  le  signal ».  Toutefois  cette phrase a été supprimée de SUSv2, et remplacée par "« le
       résultat n'est pas spécifié ».

VALEUR RENVOYÉE

       Lorsqu'ils réussissent, getcontext() renvoie zéro et setcontext() ne revient pas. En  cas  d'erreur,  ils
       retournent -1 et remplissent errno avec le code d'erreur adéquat.

ERREURS

       Aucune définie.

ATTRIBUTS

   Multithreading (voir pthreads(7))
       Les fonctions getcontext() et setcontext() sont sûres dans un contexte multithread.

CONFORMITÉ

       SUSv2,  POSIX.1-2001.  POSIX.1-2008 supprime la spécification de getcontext(), en citant des problèmes de
       portabilité et en recommandant à la place que les applications soient récrites en utilisant  les  threads
       POSIX.

NOTES

       L'incarnation  la  plus ancienne de ce mécanisme était constituée de la paire setjmp(3)/longjmp(3). Comme
       ils ne précisent pas  la  gestion  des  signaux,  l'étape  suivante  fut  sigsetjmp(3)/siglongjmp(3).  Le
       mécanisme  actuel  donne  plus  de  contrôle. 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'intermédiaire d'un  appel  setcontext().
       L'utilisateur doit inventer son propre système de comptabilisation, et pas dans un registre car il serait
       restauré.

       Lorsqu'un  signal  arrive, le contexte utilisateur courant est sauvegardé et un nouveau contexte est créé
       par le noyau  pour  exécuter  le  gestionnaire.  N'utilisez  pas  longjmp(3)  dans  le  gestionnaire,  le
       comportement est indéfini. 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.65 du projet man-pages Linux. Une description du projet et des
       instructions     pour     signaler     des     anomalies    peuvent    être    trouvées    à    l'adresse
       http://www.kernel.org/doc/man-pages/.

TRADUCTION

       Depuis 2010, cette traduction est maintenue à l'aide de l'outil po4a <http://po4a.alioth.debian.org/> par
       l'équipe de traduction francophone au sein du projet perkamon <http://perkamon.alioth.debian.org/>.

       Veuillez signaler toute erreur de traduction en écrivant à <debian-l10n-french@lists.debian.org>  ou  par
       un rapport de bogue sur le paquet manpages-fr.

       Vous pouvez toujours avoir accès à la version anglaise de ce document en utilisant la commande « man -L C
       <section> <page_de_man> ».

Linux                                             8 avril 2014                                     GETCONTEXT(3)