getcontext(2) getcontext(2)
NAME
getcontext, setcontext - Benutzerkontext ändern
SYNTAX
#include <ucontext.h>
int getcontext(ucontextt *ucp);
int setcontext(ucontextt *ucp);
BESCHREIBUNG
Diese Funktionen dienen im Zusammenhang mit den in makecontext(3C)
definierten Funktionen zur Implementierung der Kontextwechsel auf
Benutzerebene zwischen mehreren Kontrollflüssen eines Prozesses.
getcontext() initialisiert die Struktur, auf die ucp zeigt, als aktu-
ellen Benutzerkontext des aufrufenden Prozesses. Der Benutzerkontext
wird durch ucontext(5) definiert und enthält die Inhalte der Maschi-
nenregister, der Signalmaske und des Stapels des aufrufenden Prozes-
ses.
setcontext() restauriert den Benutzerkontext, auf den ucp zeigt. Der
Aufruf von setcontext() kehrt nicht zurück; die Programmausführung
fährt an der Stelle fort, auf die die Kontextstruktur aus setcontext()
zeigt. Die Kontextstruktur sollte durch einen vorhergehenden Aufruf
von getcontext() oder makecontext() erzeugt werden oder als drittes
Argument an eine Signalbehandlungsroutine [siehe sigaction(2)] gegeben
werden. Wenn die Kontextstruktur mit getcontext() erzeugt wurde, wird
die Programmausführung wieder aufgenommen, als ob der entsprechende
Aufruf von getcontext() zurückgekehrt wäre. Wenn die Kontextstruktur
mit makecontext() erzeugt wurde, wird die Programmausführung mit der
mit makecontext() angegebenen Funktion wieder aufgenommen.
getcontext() und setcontext() schlagen fehl, wenn folgende Bedingung
erfüllt ist:
EFAULT ucp zeigt auf eine ungültige Adresse.
ERGEBNIS
Nach erfolgreicher Ausführung kehrt setcontext() nicht zurück, und
getcontext() liefert 0. Ansonsten wird -1 geliefert, und errno enthält
eine Fehlernummer.
HINWEISE
Wenn eine Signalbehandlungsroutine ausgeführt wird, wird der Benutzer-
kontext gespeichert und vom Kernel ein neuer Kontext erzeugt. Wenn der
Prozeß die Signalbehandlungsroutine über longjmp(3C) verläßt, so wird
der ursprüngliche Kontext nicht restauriert, und zukünftige Aufrufe
von getcontext() sind nicht mehr zuverlässig. Signalbehandlungsrouti-
nen sollten deshalb siglongjmp(3C) oder setcontext() verwenden.
Seite 1 Reliant UNIX 5.44 Gedruckt 11/98
getcontext(2) getcontext(2)
Verwendet man getcontext() bzw. setcontext() in der Art von setjmp(3C)
bzw. longjmp(3C), dann ist zu beachten, daß der Stack-Bereich, der von
getcontext() gesichert und von setcontext() restauriert wird, zwischen
diesen beiden Aufrufen nicht unbeabsichtigt von anderen Funktionen
benutzt wird. getcontext() und setcontext() müssen in diesem Fall aus
der gleichen übergeordneten Funktion heraus aufgerufen werden.
SIEHE AUCH
sigaction(2), sigaltstack(2), sigprocmask(2), makecontext(3C),
setjmp(3C), ucontext(5).
Seite 2 Reliant UNIX 5.44 Gedruckt 11/98