Man page - setcontext(3)

Packages contains this manual

Available languages:

en fr es ja ro

Manual

getcontext

NOM
BIBLIOTHÈQUE
SYNOPSIS
DESCRIPTION
VALEUR RENVOYÉE
ERREURS
ATTRIBUTS
STANDARDS
HISTORIQUE
NOTES
VOIR AUSSI
TRADUCTION

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

Image grohtml-3882389-1.png

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 .