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