Your Browser is not longer supported

Please use Google Chrome, Mozilla Firefox or Microsoft Edge to view the page correctly
Loading...

{{viewport.spaceProperty.prod}}

getcontext, setcontext - Benutzerkontext anzeigen oder ändern

&pagelevel(4)&pagelevel

Definition

#include <ucontext.h>

int getcontext(ucontext_t *ucp);

int setcontext(const ucontext_t *ucp);

Beschreibung

Beschreibung

Diese Funktionen dienen im Zusammenhang mit den in makecontext() definierten Funktionen zur Implementierung der Kontextwechsel auf Benutzerebene zwischen mehreren Kontrollflüssen eines Prozesses.

getcontext() initialisiert die Struktur, auf die ucp zeigt, als aktuellen Benutzerkontext des aufrufenden Prozesses. Die Struktur ucontext_t, auf die ucp zeigt, definiert den Benutzerkontext und enthält die Inhalte der Maschinenregister, der Signalmaske und des Stacks des aufrufenden Prozesses.

setcontext() restauriert den Benutzerkontext, auf den ucp zeigt. Ein erfolgreicher 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() erzeugt werden oder wurde vom System als drittes Argument an eine Signalbehandlungsroutine (siehe sigaction()) geliefert.

  • 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. Wenn diese Funktion zurückkehrt, wird der Prozess wie nach einem Aufruf von setcontext() mit dem Argument ucp fortgesetzt, das auch Argument für makecontext() war.

  • Wenn das Argument ucp einer Signalbehandlungsroutine übergeben wurde, wird die Programmausführung mit dem nächsten Befehl fortgesetzt, der auf den durch das Signal unterbrochenen Befehl folgt.

Wenn die Komponente uc_link aus der Struktur ucontext_t, auf die ucp zeigt, den Wert 0 hat, dann handelt es sich um den Basisprozess, und der Prozess beendet sich, wenn dieser Kontext beendet wird. Die Verwendung eines Arguments ucp, das anders als oben beschrieben erzeugt wurde, führt zu unvorhersagbaren Ergebnissen.

Werden Threads verwendet, so wirkt sich die Funktion auf den Prozess oder auf einen Thread wie folgt aus:

  • getcontext() holt den aktuellen Benutzerkontext des aufrufenden Threads.

  • setcontext() setzt den aktuellen Benutzerkontext des aufrufenden Threads.

Returnwert

getcontext():


0

bei Erfolg.


-1

bei Fehler.

 

setcontext():

kehrt nicht zurück bei Erfolg.

 

-1

bei Fehler.                      

Hinweise

Wenn eine Signalbehandlungsroutine ausgeführt wird, wird der Benutzerkontext gespeichertund ein neuer Kontext erzeugt. Wenn der Prozess die Signalbehandlungsroutine über longjmp() verlässt, so wird der ursprüngliche Kontext nicht restauriert, und zukünftige Aufrufe von getcontext() sind nicht mehr zuverlässig. Signalbehandlungsroutinen sollten deshalb siglongjmp() oder setcontext() verwenden.

Portable Anwendungen sollten auf die Komponente uc_mcontext der Struktur ucontext_t weder zugreifen noch diese verändern. Eine portable Anwendung kann nicht davon ausgehen, dass getcontext() in ucp statische Daten des Prozesses speichert, auch nicht errno.
Bei der Manipulation von Kontexten ist Vorsicht geboten.

Siehe auch

bsd_signal(), makecontext(), setjmp(), sigaction(), sigaltstack(), sigprocmask(), sigsetjmp(), ucontext.h.