.\" -*- coding: UTF-8 -*- .\" Copyright (C) 2001 Andries Brouwer (aeb@cwi.nl) .\" .\" %%%LICENSE_START(VERBATIM) .\" Permission is granted to make and distribute verbatim copies of this .\" manual provided the copyright notice and this permission notice are .\" preserved on all copies. .\" .\" Permission is granted to copy and distribute modified versions of this .\" manual under the conditions for verbatim copying, provided that the .\" entire resulting derived work is distributed under the terms of a .\" permission notice identical to this one. .\" .\" Since the Linux kernel and libraries are constantly changing, this .\" manual page may be incorrect or out-of-date. The author(s) assume no .\" responsibility for errors or omissions, or for damages resulting from .\" the use of the information contained herein. The author(s) may not .\" have taken the same level of care in the production of this manual, .\" which is licensed free of charge, as they might when working .\" professionally. .\" .\" Formatted or processed versions of this manual, if unaccompanied by .\" the source, must acknowledge the copyright and authors of this work. .\" %%%LICENSE_END .\" .\"******************************************************************* .\" .\" This file was generated with po4a. Translate the source file. .\" .\"******************************************************************* .TH GETCONTEXT 3 "21 décembre 2020" Linux "Manuel du programmeur Linux" .SH NOM getcontext, setcontext \- Lire ou écrire le contexte utilisateur .SH SYNOPSIS \fB#include \fP .PP \fBint getcontext(ucontext_t *\fP\fIucp\fP\fB);\fP .br \fBint setcontext(const ucontext_t *\fP\fIucp\fP\fB);\fP .SH DESCRIPTION Dans un environnement de type System\ V, il existe deux types \fImcontext_t\fP et \fIucontext_t\fP définis dans \fI\fP et les quatre fonctions \fBgetcontext\fP(), \fBsetcontext\fP(), \fBmakecontext\fP(3) et \fBswapcontext\fP(3), qui permettent le changement de contexte au niveau utilisateur entre plusieurs fils de contrôle au sein du même processus (threads). .PP Le type \fImcontext_t\fP est opaque et dépend de la machine. Le type \fIucontext_t\fP est une structure ayant au moins les champs suivants\ : .PP .in +4n .EX typedef struct ucontext_t { struct ucontext_t *uc_link; sigset_t uc_sigmask; stack_t uc_stack; mcontext_t uc_mcontext; ... } ucontext_t; .EE .in .PP Les types \fIsigset_t\fP et \fIstack_t\fP sont définis dans \fI\fP. Ici, \fIuc_link\fP pointe sur le contexte qui doit être restauré lorsque le contexte courant se terminera (si le contexte en cours a été créé par \fBmakecontext\fP(3)), \fIuc_sigmask\fP est l'ensemble des signaux bloqués dans ce contexte (consultez \fBsigprocmask\fP(2)), \fIuc_stack\fP est la pile utilisée par ce contexte (consultez \fBsigaltstack\fP(2)), et \fIuc_mcontext\fP est la représentation \(em dépendant de la machine \(em du contexte sauvegardé, qui inclut les registres du processeur pour le thread appelant. .PP La fonction \fBgetcontext\fP() initialise la structure pointée par \fIucp\fP avec le contexte actuellement actif. .PP La fonction \fBsetcontext\fP() restaure le contexte utilisateur pointé par \fIucp\fP. Un appel réussi ne revient pas. Le contexte doit avoir été obtenu par un appel \fBgetcontext\fP() ou \fBmakecontext\fP(3), ou passé en troisième argument à un gestionnaire de signal. .PP Si le contexte a été obtenu par un appel \fBgetcontext\fP(), l'exécution du programme reprend comme si cet appel venait juste de se terminer. .PP Si le contexte a été obtenu par un appel \fBmakecontext\fP(3), l'exécution du programme continue par l'appel de la fonction \fIfunc\fP indiquée en second argument de \fBmakecontext\fP(3). Quand la fonction \fIfunc\fP se termine, on continue avec le membre \fIuc_link\fP de la structure \fIucp\fP spécifiée en premier argument de l'appel \fBmakecontext\fP(3). Si ce membre est NULL, le thread se termine. .PP 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é\ ». .SH "VALEUR RENVOYÉE" Lorsqu'ils réussissent, \fBgetcontext\fP() renvoie zéro et \fBsetcontext\fP() ne revient pas. En cas d'erreur, ils retournent \-1 et remplissent \fIerrno\fP avec le code d'erreur adéquat. .SH ERREURS Aucune définie. .SH ATTRIBUTS Pour une explication des termes utilisés dans cette section, consulter \fBattributes\fP(7). .TS allbox; lbw26 lb lb l l l. Interface Attribut Valeur T{ \fBgetcontext\fP(), \fBsetcontext\fP() T} Sécurité des threads MT\-Safe race:ucp .TE .SH CONFORMITÉ SUSv2, POSIX.1\-2001. POSIX.1\-2008 supprime la spécification de \fBgetcontext\fP(), en citant des problèmes de portabilité et en recommandant à la place que les applications soient récrites en utilisant les threads POSIX. .SH NOTES L'incarnation la plus ancienne de ce mécanisme était constituée de la paire \fBsetjmp\fP(3)/\fBlongjmp\fP(3). Comme ils ne précisent pas la gestion du contexte du signal, l'étape suivante fut \fBsigsetjmp\fP(3)/\fBsiglongjmp\fP(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 \fBgetcontext\fP() se fait depuis son premier appel ou par l'intermédiaire d'un appel \fBsetcontext\fP(). L'utilisateur doit inventer son propre système de comptabilisation, et pas dans un registre, car il serait restauré. .PP 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 \fBlongjmp\fP(3) dans le gestionnaire, le comportement est indéfini. Utilisez \fBsiglongjmp\fP(3) ou \fBsetcontext\fP(). .SH "VOIR AUSSI" \fBsigaction\fP(2), \fBsigaltstack\fP(2), \fBsigprocmask\fP(2), \fBlongjmp\fP(3), \fBmakecontext\fP(3), \fBsigsetjmp\fP(3), \fBsignal\fP(7) .SH COLOPHON Cette page fait partie de la publication\ 5.10 du projet \fIman\-pages\fP 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/. .PP .SH TRADUCTION La traduction française de cette page de manuel a été créée par Christophe Blaess , Stéphan Rafin , Thierry Vignaud , François Micaux, Alain Portal , Jean-Philippe Guérard , Jean-Luc Coulon (f5ibh) , Julien Cristau , Thomas Huriaux , Nicolas François , Florentin Duneau , Simon Paillard , Denis Barbier , David Prévot et Frédéric Hantrais . .PP Cette traduction est une documentation libre ; veuillez vous reporter à la .UR https://www.gnu.org/licenses/gpl-3.0.html GNU General Public License version 3 .UE concernant les conditions de copie et de distribution. Il n'y a aucune RESPONSABILITÉ LÉGALE. .PP Si vous découvrez un bogue dans la traduction de cette page de manuel, veuillez envoyer un message à .MT debian-l10n-french@lists.debian.org .ME .