Museum

Home

Lab Overview

Retrotechnology Articles

⇒ Online Manual

Media Vault

Software Library

Restoration Projects

Artifacts Sought

Related Articles

sigaction(2)

sigaltstack(2)

sigprocmask(2)

makecontext(3C)

setjmp(3C)

ucontext(5)

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

Typewritten Software • bear@typewritten.org • Edmonds, WA 98026