Provided by: manpages-fr-dev_4.23.1-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  ⟨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⟩.