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

       Aucune.

HISTORIQUE

       SUSv2, POSIX.1-2001.

       POSIX.1-2008 supprime ces fonctions, 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
       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), 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
       <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>,    Frédéric    Hantrais   <fhantrais@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 à
       debian-l10n-french@lists.debian.org.

Pages du manuel de Linux 6.9.1                     2 mai 2024                                      getcontext(3)