Man page - setcontext(3)

Packages contains this manual

Available languages:

en fr es ja ro

Manual

GETCONTEXT

名 前
書 式
説 明
返 り 値
エ ラ ー
属 性
準 拠
注 意
関 連 項 目
こ の 文 書 に つ い て

名 前

getcontext, setcontext - ユ ー ザ ー コ ン テ キ ス ト を 取 得 /設 定 す る

書 式

#include <ucontext.h>

int getcontext(ucontext_t * ucp );
int setcontext(const ucontext_t *
ucp );

説 明

System V 的 な 環 境 で は 、 mcontext_t お よ び ucontext_t と い う 2 つ の 型 と 、 getcontext (), setcontext (), makecontext (3), swapcontext (3) と い う 4 つ の 関 数 が <ucontext.h> で 定 義 さ れ て お り 、 あ る プ ロ セ ス 内 部 で 制 御 下 に あ る 複 数 の ス レ ッ ド 間 で 、 ユ ー ザ ー レ ベ ル の コ ン テ キ ス ト 切 替 え が で き る よ う に な っ て い る 。

mcontext_t 型 は マ シ ン 依 存 で 、 外 部 か ら は 隠 蔽 さ れ て い る 。 ucontext_t 型 は 構 造 体 で 、 少 な く と も 以 下 の 4 つ の フ ィ ー ル ド を 持 つ 。

typedef struct ucontext_t {
struct ucontext_t *uc_link;
sigset_t uc_sigmask;
stack_t uc_stack;
mcontext_t uc_mcontext;
...
} ucontext_t;

sigset_t stack_t <signal.h> で 定 義 さ れ て い る 。 こ こ で uc_link は 、 現 在 の コ ン テ キ ス ト が 終 了 し た と き 、 続 い て 切 り 替 わ る コ ン テ キ ス ト へ の ポ イ ン タ ー で あ る (現 在 の コ ン テ キ ス ト が makecontext (3) で 生 成 さ れ た も の の 場 合 )。 uc_sigmask は こ の コ ン テ キ ス ト で ブ ロ ッ ク さ れ て い る シ グ ナ ル 群 で あ る ( sigprocmask (2) を 見 よ )。 uc_stack は こ の コ ン テ キ ス ト が 用 い て い る ス タ ッ ク で あ る ( signalstack (2) を 見 よ )。 uc_mcontext は 保 存 さ れ て い る コ ン テ キ ス ト の マ シ ン 特 有 の 表 現 形 式 で あ り 、 こ こ に は 呼 び 出 し た ス レ ッ ド の マ シ ン レ ジ ス タ ー が 格 納 さ れ る 。

getcontext () 関 数 は 、 ポ イ ン タ ー ucp が 指 す 構 造 体 を 、 現 在 ア ク テ ィ ブ な コ ン テ キ ス ト に 初 期 化 す る 。

The function setcontext () restores the user context pointed to by ucp . A successful call does not return. The context should have been obtained by a call of getcontext (), or makecontext (3), or received as the third argument to a signal handler (see the discussion of the SA_SIGINFO flag in sigaction (2)).

コ ン テ キ ス ト が getcontext () の 呼 び 出 し に よ っ て 得 ら れ て い た も の の 場 合 は 、 プ ロ グ ラ ム は こ の 呼 び 出 し か ら 返 っ た 直 後 か ら の よ う に 実 行 を 継 続 す る 。

コ ン テ キ ス ト が makecontext (3) の 呼 び 出 し に よ っ て 得 ら れ て い た も の の 場 合 は 、 プ ロ グ ラ ム の 実 行 は そ の makecontext (3) 呼 び 出 し の 第 二 引 数 で 指 定 さ れ た 関 数 func を 呼 び 出 す か た ち で 継 続 す る 。 func か ら 返 る と 、 makecontext (3) 呼 び 出 し の 第 一 引 数 で 指 定 さ れ て い た ucp 構 造 体 の uc_link メ ン バ で 継 続 す る 。 こ の メ ン バ が NULL だ っ た 場 合 は 、 そ の ス レ ッ ド は 終 了 す る 。

コ ン テ キ ス ト が シ グ ナ ル ハ ン ド ラ ー の 呼 び 出 し に よ っ て 得 ら れ て い た も の の 場 合 は 、 古 い 標 準 に よ れ ば 「 プ ロ グ ラ ム の 実 行 は シ グ ナ ル に よ っ て 割 り 込 ま れ た 命 令 の 次 の 命 令 か ら 継 続 さ れ る 」 。 し か し こ の 文 は SUSv2 で 削 除 さ れ た の で 、 現 在 の 判 断 は 「 結 果 は 定 義 さ れ て い な い 」 で あ る 。

返 り 値

成 功 す る と 、 getcontext () は 0 を 返 し 、 setcontext () は 返 ら な い 。 失 敗 す る と 、 両 者 と も -1 を 返 し 、 errno を エ ラ ー に 応 じ て 設 定 す る 。

エ ラ ー

定 義 さ れ て い な い 。

属 性

こ の 節 で 使 用 さ れ て い る 用 語 の 説 明 に つ い て は 、 attributes (7) を 参 照 。

Image grohtml-30924-1.png

準 拠

SUSv2, POSIX.1-2001. POSIX.1-2008 で は 、 移 植 性 の 問 題 か ら getcontext () の 仕 様 が 削 除 さ れ た 。 代 わ り に 、 ア プ リ ケ ー シ ョ ン を POSIX ス レ ッ ド を 使 っ て 書 き 直 す こ と が 推 奨 さ れ て い る 。

注 意

こ の メ カ ニ ズ ム の 最 古 の 実 装 は 、 setjmp (3)/ longjmp (3) 機 構 で あ っ た 。 こ れ ら に は シ グ ナ ル コ ン テ キ ス ト の 取 り 扱 い が 定 義 さ れ て い な か っ た の で 、 次 の 段 階 で は sigsetjmp (3)/ siglongjmp (3) の ペ ア が 現 わ れ た 。 現 在 の 機 構 で は ず っ と 細 か な 制 御 が で き る 。 一 方 getcontext () か ら 返 っ た と き 、 こ れ が 最 初 の 呼 び 出 し で あ っ た か 、 そ れ と も setcontext () 呼 び 出 し か ら の も の で あ る か を 区 別 す る 容 易 な 方 法 が な く な っ て し ま っ た 。 ユ ー ザ ー は 「 し お り 」 機 構 を 自 分 で 作 ら な け れ ば な ら な い 。 レ ジ ス タ ー 変 数 は (レ ジ ス タ ー は リ ス ト ア さ れ て し ま う の で ) こ れ を や っ て く れ な い 。

シ グ ナ ル が 発 生 す る と 、 現 在 の ユ ー ザ ー コ ン テ キ ス ト は 保 存 さ れ 、 シ グ ナ ル ハ ン ド ラ ー 用 の コ ン テ キ ス ト が カ ー ネ ル に よ っ て 生 成 さ れ る 。 今 後 は ハ ン ド ラ ー に longjmp (3) を 使 わ せ な い こ と : こ の 関 数 の コ ン テ キ ス ト 下 で の 動 作 は 定 義 さ れ て い な い 。 代 わ り に siglongjmp (3) か setcontext () を 使 う こ と 。

関 連 項 目

sigaction (2), sigaltstack (2), sigprocmask (2), longjmp (3), makecontext (3), sigsetjmp (3), signal (7)

こ の 文 書 に つ い て

こ の man ペ ー ジ は Linux man-pages プ ロ ジ ェ ク ト の リ リ ー ス 5.10 の 一 部 で あ る 。 プ ロ ジ ェ ク ト の 説 明 と バ グ 報 告 に 関 す る 情 報 は https://www.kernel.org/doc/man-pages/ に 書 か れ て い る 。