Votre IP: 38.107.179.241 
  
 
Google
 
Accueil e-mail Linux
Linux
Perl
Perl
C
Langage C
Dico
Dictionnaire
Biblio liens
Bibliothèque de liens
Index articles
Index articles
 

Date création : 27-03-2008 20:23:44

Linux  Vous êtes dans : GNU/Linux Astuces / Pages man [Section2 - Appels système]


GETCONTEXT

 

Index

  1. NOM
  2. SYNOPSIS
  3. DESCRIPTION
  4. VALEUR RENVOYÉE
  5. ERREURS
  6. NOTES
  7. CONFORMITÉ
  8. VOIR AUSSI
  9. TRADUCTION

 

NOMIndex

getcontext, setcontext - Lire ou écrire le contexte utilisateur  

SYNOPSISIndex

#include <ucontext.h>
int getcontext(ucontext_t *ucp);
int setcontext(const ucontext_t *ucp);  

DESCRIPTIONIndex

Dans un environnement de type Système V, il existe deux types mcontext_t et ucontext_t définis dans <ucontext.h> et les quatre fonctions getcontext(), setcontext(), makecontext() et swapcontext(), 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 {
    struct ucontext *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()), uc_sigmask est l'ensemble des signaux bloqués dans ce contexte (voir sigprocmask(2)), uc_stack est la pile utilisée par ce contexte (voir sigaltstack(2)), et uc_mcontext est la représentation --- dépendant de la machine --- du contexte sauvegardé, qui inclue les registres du processeur pour le thread appelant.
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(), 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(), l'exécution du programme continue par l'appel de la fonction func indiquée en second argument de makecontext(). 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(). 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ÉEIndex

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.  

ERREURSIndex

Aucune définie.  

NOTESIndex

L'incarnation la plus ancienne de ce mécanisme était constituée de la paire setjmp()/longjmp(). Comme ils ne précisent pas la gestion des signaux, l'étape suivante fut sigsetjmp()/siglongjmp(). 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() dans le gestionnaire, le comportement est indéfini. Utilisez siglongjmp() ou setcontext().  

CONFORMITÉIndex

SUSv2, POSIX.1-2001.  

VOIR AUSSIIndex

sigaction(2), sigaltstack(2), sigprocmask(2), longjmp(3), makecontext(3), sigsetjmp(3)  

TRADUCTIONIndex

Cette page de manuel a été traduite et mise à jour par Christophe Blaess <http://www.blaess.fr/christophe/> entre 1996 et 2003, puis par Alain Portal <aportal AT univ-montp2 DOT fr> jusqu'en 2006.
La traduction de cette page de manuel est basée sur les traductions disponibles sur http://manpagesfr.free.fr/, mais est gérée par l'équipe francophone de traduction de Debian au travers de la liste de discussion debian-l10n-french.
Veuillez signaler toute erreur de traduction par un rapport de bogue sur le paquet manpages-fr.
Vous pouvez toujours avoir accès à la version anglaise de ce document en utilisant la commande « man -L C <section> <page_de_man> ».


Création : octobre 2007  © Tous droits réservés 2007 linux-perl-c
Valid HTML 4.01 TransitionalValid CSS