dwww Home | Manual pages | Find package

getcontext(3)              Library Functions Manual              getcontext(3)

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 getcon-
       text(),  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 ucon-
       text_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ésen-
       tation — 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  ar-
       gument à 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 pre-
       mier 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 si-
       gnal, alors le texte des anciens standards  dit  que  « l'exécution  du
       programme continue avec l'instruction suivant celle qui a été interrom-
       pue 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 re-
       vient 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  getcon-
       text(),  en citant des problèmes de portabilité et en recommandant à la
       place que les applications soient récrites en utilisant les threads PO-
       SIX.

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 gestion-
       naire. 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),  makecon-
       text(3), sigsetjmp(3), signal(7)

TRADUCTION
       La traduction française de cette page de manuel a été créée par  Chris-
       tophe  Blaess  <https://www.blaess.fr/christophe/>, Stéphan Rafin <ste-
       phan.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.cou-
       lon@wanadoo.fr>,  Julien  Cristau <jcristau@debian.org>, Thomas Huriaux
       <thomas.huriaux@gmail.com>, Nicolas François  <nicolas.francois@centra-
       liens.net>,  Florentin  Duneau <fduneau@gmail.com>, Simon Paillard <si-
       mon.paillard@resel.enst-bretagne.fr>,   Denis   Barbier    <barbier@de-
       bian.org>, David Prévot <david@tilapin.org> et Frédéric Hantrais <fhan-
       trais@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⟩.

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

Generated by dwww version 1.15 on Sat Jun 29 01:47:56 CEST 2024.