makecontext(3C) makecontext(3C)
NAME
makecontext, swapcontext - Benutzerkontext ändern
SYNTAX
#include <ucontext.h>
void makecontext(ucontextt *ucp, (void *func)(), int argc,...);
int swapcontext(ucontextt *oucp, ucontextt *ucp);
BESCHREIBUNG
Diese Funktionen sind nützlich zur Implementierung eines Kontextwech-
sels zwischen mehreren Kontrollflüssen innerhalb eines Benutzerprozes-
ses.
makecontext() verändert den durch ucp angegebenen Kontext, der über
getcontext() initialisiert wurde; wird dieser Kontext mit
swapcontext() oder setcontext() aktiviert [siehe getcontext(2)], wird
die Programmausführung durch Aufruf der Funktion func wieder aufgenom-
men, wobei die Argumente, die auf argc folgen, an makecontext() über-
geben werden.
Vor dem Aufrufen von makecontext() sollte dem zu ändernden Kontext ein
Stapelspeicher (Stack) zugeordnet werden. Der ganzzahlige Wert von
argc muß der Anzahl der ganzzahligen Argumente entsprechen, die an
func übergeben wurden. Ansonsten ist das Verhalten undefiniert.
Die Komponente uclink wird verwendet, um den Kontext zu ermitteln,
der wiederaufgenommen werden soll, wenn der durch makecontext() geän-
derte Kontext zurückgegeben wird. Die Komponente uclink muß vor dem
Aufrufen von makecontext() initialisiert werden.
swapcontext() sichert den aktuellen Kontext in der Kontextstruktur,
auf die oucp zeigt, und setzt den Kontext auf die Kontextstruktur, auf
die ucp zeigt.
FEHLER
Diese Funktionen schlagen fehl, wenn eine der folgenden Bedingungen
erfüllt ist:
ENOMEM ucp hat nicht mehr genügend Stapelspeicher, um die Operation
durchzuführen.
EFAULT ucp oder oucp zeigt auf eine ungültige Adresse.
ERGEBNIS
Nach erfolgreicher Ausführung liefert swapcontext() den Wert Null
zurück. Ansonsten wird -1 zurückgegeben und errno gesetzt.
Seite 1 Reliant UNIX 5.44 Gedruckt 11/98
makecontext(3C) makecontext(3C)
HINWEISE
Die Länge der Struktur ucontextt kann sich in zukünftigen Versionen
ändern. Um eine Binärkompatibilität zu garantieren, müssen die Benut-
zer dieser Funktionen immer makecontext() oder getcontext() verwenden,
um neue Kontexte zu erzeugen.
SIEHE AUCH
exit(2), getcontext(2), sigaction(2), sigprocmask(2), ucontext(5).
Seite 2 Reliant UNIX 5.44 Gedruckt 11/98