makecontext ou swapcontext Subroutine
Objectif
Modifie le contexte spécifié par ucp.
Bibliothèque
(libc.a)
Syntaxe
#include < ucontext.h >
void makecontext (ucontext_t *ucp, (void *func) (), int argc, ...) ; int swapcontext (uncontext_t *oucp, const uncontext_t *ucp) ;
Descriptif
La sous-routine makecontext modifie le contexte spécifié par ucp, qui a été initialisé à l'aide de la sous-routine getcontext . Lorsque ce contexte est repris à l'aide de la sous-routine swapcontext ou de la sous-routine setcontext , l'exécution du programme se poursuit en appelant le paramètre func , transmettre les arguments qui suivent argc dans la sous-routine makecontext .
Avant qu'un appel soit effectué à la sous-routine makecontext , une pile doit être allouée au contexte en cours de modification. La valeur de argc doit correspondre au nombre d'arguments de type entier transmis au paramètre func , sinon le comportement n'est pas défini.
Le membre uc_link permet de déterminer le contexte qui sera repris lorsque le contexte modifié par la sous-routine makecontext sera renvoyé. Le membre uc_link doit être initialisé avant l'appel à la sous-routine makecontext .
La fonction de sous-routine swapcontext sauvegarde le contexte en cours dans la structure de contexte indiquée par le paramètre oucp et définit le contexte sur la structure de contexte indiquée par ucp.
Paramètres
| Article | Descriptif |
|---|---|
| ucp | Pointeur vers une structure utilisateur. |
| oucp | Pointeur vers une structure utilisateur. |
| Fonction | Un pointeur vers une fonction à appeler lorsque ucp est restauré. |
| argument | Nombre d'arguments transmis au paramètre func . |
Valeurs renvoyées
Une fois l'opération terminée, la sous-routine swapcontext renvoie 0. Dans le cas contraire, la valeur -1 est renvoyée et errno est défini pour indiquer l'erreur.
| Article | Descriptif |
|---|---|
| -1 | L'opération a échoué et la variable globale errno est définie sur l'un des codes d'erreur suivants. |
Codes d'erreur
| Article | Descriptif |
|---|---|
| ENOMEM | L'argument ucp ne dispose pas de suffisamment de pile pour terminer l'opération. |