Provided by: manpages-fr-dev_4.21.0-2_all bug

NOM

       getcontext, setcontext - Lire ou écrire le contexte utilisateur

BIBLIOTHÈQUE

       Bibliothèque C standard (libc, -lc)

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

       La fonction getcontext() initialise 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 0 et setcontext() ne  revient  pas.  En  cas  d'erreur,  ils
       retournent -1 et définissent errno pour indiquer l'erreur.

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 │
       └─────────────────────────────────────────────────────────────┴──────────────────────┴──────────────────┘

STANDARDS

       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 du contexte du signal, 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 se‐
       rait 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 comporte‐
       ment est indéfini. Utilisez siglongjmp(3) ou setcontext().

VOIR AUSSI

       sigaction(2), sigaltstack(2), sigprocmask(2), longjmp(3), makecontext(3), sigsetjmp(3), signal(7)

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 <tvi‐
       gnaud@mandriva.com>, François Micaux, Alain Portal <aportal@univ-montp2.fr>, Jean-Philippe  Guérard  <fe‐
       vrier@tigreraye.org>,  Jean-Luc Coulon (f5ibh) <jean-luc.coulon@wanadoo.fr>, Julien Cristau <jcristau@de‐
       bian.org>,  Thomas  Huriaux  <thomas.huriaux@gmail.com>,   Nicolas   François   <nicolas.francois@centra‐
       liens.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>,  Frédéric  Hantrais  <fhan‐
       trais@gmail.com> et Jean-Pierre Giraud <jean-pierregiraud@neuf.fr>

       Cette traduction est une documentation libre ; veuillez vous  reporter  à  la  GNU General Public License
       version 3 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 à de‐
       bian-l10n-french@lists.debian.org.

Pages du manuel de Linux 6.03                   15 décembre 2022                                   getcontext(3)