makecontext oder swapcontext, Subroutine

Zweck

Ändert den durch ucpangegebenen Kontext.

Bibliothek

(libc.a)

Syntax

#include <ucontext.h>

void makecontext (ucontext_t *ucp, (void *func) (), int Argc, ...); int swapcontext (uncontext_t *oucp, const uncontext_t *ucp);

Beschreibung

Die Subroutine makecontext ändert den von ucpangegebenen Kontext, der mit der Subroutine getcontext initialisiert wurde. Wenn dieser Kontext mit der Subroutine swapcontext oder der Subroutine setcontext wiederaufgenommen wird, wird die Programmausführung durch Aufrufen des Parameters func fortgesetzt. Übergabe der Argumente, die auf argc in der Subroutine makecontext folgen.

Bevor ein Aufruf an die Subroutine makecontext erfolgt, sollte dem zu ändernden Kontext ein Stack zugeordnet werden. Der Wert von argc muss mit der Anzahl der ganzzahligen Argumente übereinstimmen, die an den Parameter func übergeben werden. Andernfalls ist das Verhalten nicht definiert.

Das Member uc_link wird verwendet, um den Kontext zu bestimmen, der fortgesetzt wird, wenn der von der Subroutine makecontext geänderte Kontext zurückgegeben wird. Das Member uc_link sollte vor dem Aufruf der Subroutine makecontext initialisiert werden.

Die Subroutinenfunktion swapcontext speichert den aktuellen Kontext in der Kontextstruktur, auf die der Parameter oucp verweist, und setzt den Kontext auf die Kontextstruktur, auf die der Parameter ucpverweist.

Parameter

Element Beschreibung
UCP Ein Zeiger auf eine Benutzerstruktur
oucp Ein Zeiger auf eine Benutzerstruktur
func Ein Zeiger auf eine Funktion, die aufgerufen werden soll, wenn ucp wiederhergestellt wird
argc Die Anzahl der an den Parameter func übergebenen Argumente.

Rückgabewerte

Nach erfolgreicher Beendigung gibt die Subroutine swapcontext 0 zurück. Andernfalls wird ein Wert von -1 zurückgegeben und errno wird gesetzt, um den Fehler anzuzeigen.

Element Beschreibung
-1 Nicht erfolgreich und die globale Variable errno ist auf einen der folgenden Fehlercodes gesetzt.

Fehlercodes

Element Beschreibung
ENOMEM Das Argument ucp verfügt nicht über genügend Stack, um die Operation abzuschließen.