getcontext(3) Library Functions Manual getcontext(3) NOM getcontext, setcontext - Lire ou ecrire le contexte utilisateur BIBLIOTHEQUE Bibliotheque C standard (libc, -lc) SYNOPSIS #include 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 definis dans et les quatre fonctions getcontext(), setcontext(), makecontext(3) et swapcontext(3), qui permettent le changement de contexte au niveau utilisateur entre plusieurs fils de controle au sein du meme processus (threads). Le type mcontext_t est opaque et depend 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 definis dans . Ici, uc_link pointe sur le contexte qui doit etre restaure lorsque le contexte courant se terminera (si le contexte en cours a ete cree par makecontext(3)), uc_sigmask est l'ensemble des signaux bloques dans ce contexte (consultez sigprocmask(2)), uc_stack est la pile utilisee par ce contexte (consultez sigaltstack(2)), et uc_mcontext est la representation -- dependant de la machine -- du contexte sauvegarde, qui inclut les registres du processeur pour le thread appelant. La fonction getcontext() initialise la structure pointee par ucp avec le contexte actuellement actif. La fonction setcontext() restaure le contexte utilisateur pointe par ucp. Un appel reussi ne revient pas. Le contexte doit avoir ete obtenu par un appel getcontext() ou makecontext(3), ou passe en troisieme argument a un gestionnaire de signal. Si le contexte a ete obtenu par un appel getcontext(), l'execution du programme reprend comme si cet appel venait juste de se terminer. Si le contexte a ete obtenu par un appel makecontext(3), l'execution du programme continue par l'appel de la fonction func indiquee en second argument de makecontext(3). Quand la fonction func se termine, on continue avec le membre uc_link de la structure ucp specifiee en premier argument de l'appel makecontext(3). Si ce membre est NULL, le thread se termine. Si le contexte a ete obtenu lors d'un appel a un gestionnaire de signal, alors le texte des anciens standards dit que << l'execution du programme continue avec l'instruction suivant celle qui a ete interrompue par le signal >>. Toutefois cette phrase a ete supprimee de SUSv2, et remplacee par "<< le resultat n'est pas specifie >>. VALEUR RENVOYEE Lorsqu'ils reussissent, getcontext() renvoie 0 et setcontext() ne revient pas. En cas d'erreur, ils retournent -1 et definissent errno pour indiquer l'erreur. ERREURS Aucune definie. ATTRIBUTS Pour une explication des termes utilises dans cette section, consulter attributes(7). +------------------------+--------------------------+------------------+ |Interface | Attribut | Valeur | +------------------------+--------------------------+------------------+ |getcontext(), | Securite des threads | MT-Safe race:ucp | |setcontext() | | | +------------------------+--------------------------+------------------+ STANDARDS Aucune. HISTORIQUE SUSv2, POSIX.1-2001. POSIX.1-2008 supprime ces fonctions, en citant des problemes de portabilite et en recommandant a la place que les applications soient recrites en utilisant les threads POSIX. NOTES L'incarnation la plus ancienne de ce mecanisme etait constituee de la paire setjmp(3)/longjmp(3). Comme ils ne precisent pas la gestion du contexte du signal, l'etape suivante fut sigsetjmp(3)/siglongjmp(3). Le mecanisme actuel donne plus de controle. 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'intermediaire d'un appel setcontext(). L'utilisateur doit inventer son propre systeme de comptabilisation, et pas dans un registre, car il serait restaure. Lorsqu'un signal arrive, le contexte utilisateur courant est sauvegarde et un nouveau contexte est cree par le noyau pour executer le gestionnaire. N'utilisez pas longjmp(3) dans le gestionnaire, le comportement est indefini. Utilisez siglongjmp(3) ou setcontext(). VOIR AUSSI sigaction(2), sigaltstack(2), sigprocmask(2), longjmp(3), makecontext(3), sigsetjmp(3), signal(7) TRADUCTION La traduction francaise de cette page de manuel a ete creee par Christophe Blaess , Stephan Rafin , Thierry Vignaud , Francois Micaux, Alain Portal , Jean-Philippe Guerard , Jean-Luc Coulon (f5ibh) , Julien Cristau , Thomas Huriaux , Nicolas Francois , Florentin Duneau , Simon Paillard , Denis Barbier , David Prevot , Frederic Hantrais et Jean- Pierre Giraud Cette traduction est une documentation libre ; veuillez vous reporter a la GNU General Public License version 3 concernant les conditions de copie et de distribution. Il n'y a aucune RESPONSABILITE LEGALE. Si vous decouvrez un bogue dans la traduction de cette page de manuel, veuillez envoyer un message a . Pages du manuel de Linux 6.8 2 mai 2024 getcontext(3)