EN JA
GETCONTEXT(3)
GETCONTEXT(3) FreeBSD Library Functions Manual GETCONTEXT(3)

名称

getcontext, getcontextx, setcontextユーザスレッドのコンテキストを取得して設定する

ライブラリ

Standard C Library (libc, -lc)

書式

#include < ucontext.h>

int
getcontext( ucontext_t *ucp);

ucontext_t *
getcontextx( void);

int
setcontext( const ucontext_t *ucp);

解説

getcontext() 関数は、 ucp によって指された構造体中の現在実行中のスレッドのコンテキストを保存します。この保存されたコンテキストは、 setcontext() を呼び出すことよって後で復旧されます。

getcontextx() 関数は、成功すれば、返される、新しく割り付けられた構造体 ucontext_t に現在の実行コンテキストを保存します。アーキテクチャが ucontext_t から参照される拡張ブロックに格納することができる追加の CPU 状態を定義するなら、それらのためのメモリは、割り付けられ、それらのコンテキストも格納されます。 getcontextx() 関数によって返されたメモリは、 free( 3) 使用して解放すべきです。

setcontext() 関数は、前もって保存されたスレッドのコンテキストを現在のスレッドのコンテキストにします、すなわち、現在のコンテキストは、無くなり、 setcontext() は、返りません。代わりに ucp によって指定されたコンテキストで実行は、継続します。 ucp は、 getcontext(), makecontext(3) への呼び出し、またはシグナルハンドラ ( sigaction(2) 参照) に引数として渡されることによって、前もって初期化されていなければなりません。

ucpgetcontext() によって初期化されたなら、まるでオリジナルの getcontext() 呼び出しが (再び) ちょうど返ったかのように実行は、続きます。

ucpmakecontext(3) によって初期化されたなら、 makecontext(3) に指定された関数を呼び出して実行を続行します。その関数が返るとき、 ucp->uc_link は、何が次に起こるかを決定します: ucp->uc_linkNULL であるなら、プロセスは、終了します。そうでなければ、 setcontext( ucp->uc_link) は、暗黙のうちに呼び出されます。

ucp がシグナルハンドラの呼び出しで初期化されたなら、シグナルで割り込まれたスレッドの時点で実行は、継続します。

戻り値

成功すれば、 getcontext() は、0 を返し、 setcontext() は、返りません。そうでなければ、-1 を返します。 getcontextx() は、成功すれば割り付けられて、初期化されたコンテキストへのポインタを返し、失敗すれば、 NULL を返します。

エラー

getcontext() または setcontext() のためのエラーは、定義されていません。 getcontextx() は、 errno に次のエラーを返します:
[ ENOMEM]
コンテキストまたはある拡張状態のために、割り付けするメモリが利用可能ではありませんでした。
March 13, 2013 FreeBSD