Rechercher une page de manuel
getcontext
Langue: fr
Version: 15 novembre 2001 (mandriva - 01/05/08)
Section: 2 (Appels système)
NOM
getcontext, setcontext - Lire ou écrire le contexte utilisateurSYNOPSIS
#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) 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 { struct ucontext *uc_link; sigset_t uc_sigmask; stack_t uc_stack; mcontext_t uc_mcontext; ... } ucontext_t;
La fonction getcontext() remplit 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 terminer, 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 zéro et setcontext() ne revient pas. En cas d'erreur, ils retournent -1 et remplissent errno avec le code d'erreur adéquat.ERREURS
Aucune définie.CONFORMITÉ
SUSv2, POSIX.1-2001.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 des signaux, 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)TRADUCTION
Ce document est une traduction réalisée par Christophe Blaess <http://www.blaess.fr/christophe/> le 18 juillet 2003 et révisée le 22 novembre 2007.
L'équipe de traduction a fait le maximum pour réaliser une adaptation française de qualité. La version anglaise la plus à jour de ce document est toujours consultable via la commande : « LANG=C man 2 getcontext ». N'hésitez pas à signaler à l'auteur ou au traducteur, selon le cas, toute erreur dans cette page de manuel.
Contenus ©2006-2024 Benjamin Poulain
Design ©2006-2024 Maxime Vantorre