Provided by: manpages-fr-dev_4.13-4_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

       In a System V-like environment, one has the two types mcontext_t and ucontext_t defined in
       <ucontext.h> and  the  four  functions  getcontext(),  setcontext(),  makecontext(3),  and
       swapcontext(3) that allow user-level context switching between multiple threads of control
       within a process.

       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_t {
               struct ucontext_t *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.

       The function getcontext()  initializes the structure pointed to by ucp  to  the  currently
       active context.

       The  function setcontext()  restores the user context pointed to by ucp. A successful call
       does not return. The context should have been obtained  by  a  call  of  getcontext(),  or
       makecontext(3),  or received as the third argument to a signal handler (see the discussion
       of the SA_SIGINFO flag in sigaction(2)).

       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

       Pour une explication des termes utilisés dans cette section, consulter attributes(7).

       ┌───────────────────────────┬──────────────────────┬──────────────────┐
       │InterfaceAttributValeur           │
       ├───────────────────────────┼──────────────────────┼──────────────────┤
       │getcontext(), setcontext() │ Sécurité des threads │ MT-Safe race:ucp │
       └───────────────────────────┴──────────────────────┴──────────────────┘

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

       The  earliest incarnation of this mechanism was the setjmp(3)/longjmp(3)  mechanism. Since
       that does not define  the  handling  of  the  signal  context,  the  next  stage  was  the
       sigsetjmp(3)/siglongjmp(3)   pair.  The  present mechanism gives much more control. On the
       other hand, there is no easy way to detect whether a return from getcontext()  is from the
       first  call,  or  via  a  setcontext()  call. The user has to invent their own bookkeeping
       device, and a register variable won't do since registers are restored.

       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),
       signal(7)

COLOPHON

       Cette page fait partie de la publication 5.10 du projet man-pages Linux.  Une  description
       du  projet et des instructions pour signaler des anomalies et la dernière version de cette
       page peuvent être trouvées à l'adresse https://www.kernel.org/doc/man-pages/.

TRADUCTION

       La traduction française de cette  page  de  manuel  a  été  créée  par  Christophe  Blaess
       <https://www.blaess.fr/christophe/>,  Stéphan  Rafin  <stephan.rafin@laposte.net>, Thierry
       Vignaud <tvignaud@mandriva.com>, François Micaux, Alain  Portal  <aportal@univ-montp2.fr>,
       Jean-Philippe    Guérard   <fevrier@tigreraye.org>,   Jean-Luc   Coulon   (f5ibh)   <jean-
       luc.coulon@wanadoo.fr>,   Julien    Cristau    <jcristau@debian.org>,    Thomas    Huriaux
       <thomas.huriaux@gmail.com>, Nicolas François <nicolas.francois@centraliens.net>, Florentin
       Duneau <fduneau@gmail.com>, Simon Paillard <simon.paillard@resel.enst-bretagne.fr>,  Denis
       Barbier  <barbier@debian.org>,  David  Prévot  <david@tilapin.org>  et  Frédéric  Hantrais
       <fhantrais@gmail.com>

       Cette traduction est une documentation libre ; veuillez vous reporter  à  la  GNU  General
       Public   License   version 3  ⟨https://www.gnu.org/licenses/gpl-3.0.html⟩  concernant  les
       conditions de copie et de distribution. Il n'y a aucune RESPONSABILITÉ LÉGALE.

       Si vous découvrez un bogue dans la traduction de cette page de manuel, veuillez envoyer un
       message à debian-l10n-french@lists.debian.org ⟨⟩.