名 前
longjmp, siglongjmp − 保 存 さ れ た ス タ ッ ク コ ン テ キ ス ト (stack context) へ の 非 局 所 的 な ジ ャ ン プ
書 式
#include <setjmp.h>
void longjmp(jmp_buf env, int val);
void siglongjmp(sigjmp_buf env, int val);
glibc 向 け の 機 能 検 査 マ ク ロ の 要 件 (feature_test_macros(7) 参 照 ):
siglongjmp(): _POSIX_C_SOURCE >= 1 || _XOPEN_SOURCE || _POSIX_C_SOURCE
説 明
longjmp() と setjmp(3) は 、 プ ロ グ ラ ム の 低 レ ベ ル な サ ブ ル ー チ ン に お い て 、 エ ラ ー や 割 り 込 み が 発 生 し た 時 の 処 理 に 便 利 で あ る 。 longjmp() は 、 env 引 き 数 を 指 定 し て 呼 び 出 さ れ た 最 後 の setjmp(3) に よ っ て 保 存 さ れ た 環 境 を 復 元 す る 。 longjmp() の 完 了 後 、 プ ロ グ ラ ム の 実 行 は 、 ま る で 対 応 す る setjmp(3) の 呼 び 出 し が 値 val で 返 っ て 来 た か よ う に 続 行 さ れ る 。 longjmp() は 0 を 返 す よ う に 指 示 す る こ と は で き な い 。 二 番 目 の 引 き 数 に 0 を 指 定 し て longjmp() が 呼 ば れ た 場 合 は 、 代 わ り に 1 が 返 さ れ る こ と に な る 。
siglongjmp() は 、 引 き 数 env の 型 が 異 な る 点 以 外 は 、 longjmp() と 同 様 で あ る 。 env を 保 存 し た sigsetjmp(3) が 0 以 外 の savesigs フ ラ グ で 呼 び 出 さ れ て い た 場 合 で 、 か つ 、 そ の 場 合 に の み 、 siglongjmp(3) は sigsetjmp(3) よ り 保 存 さ れ て い た シ グ ナ ル マ ス ク の 復 元 を 行 う 。
返 り 値
こ れ ら の 関 数 が 返 る こ と は な い 。
準 拠
longjmp() は C89, C99, POSIX.1−2001 で 規 定 さ れ て い る 。 siglongjmp() は POSIX.1−2001 で 規 定 さ れ て い る 。
注 意
POSIX で は 、 longjmp() が シ グ ナ ル コ ン テ キ ス ト (signal context) を 復 元 す る か ど う か 規 定 さ れ て い な い (setjmp(3) に も 少 し 詳 し い 情 報 が あ る )。 移 植 性 の あ る 方 法 で 、 シ グ ナ ル マ ス ク を 保 存 し 復 元 さ せ た い 場 合 に は 、 sigsetjmp(3) と siglongjmp() を 使 う こ と 。 以 下 の 条 件 が 全 て 成 立 す る 場 合 、 longjmp() の 呼 び 出 し が 行 わ れ た 後 の 自 動 変 数 の 値 は 未 定 義 (unspecified) と な る 。
• そ の 自 動 変 数 が 、 対 応 す る |
setjmp(3) 呼 び 出 し を 行 っ た 関 数 の ロ ー カ ル 変 |
数 で あ る 。
• 自 動 変 数 の 値 が |
setjmp(3) と longjmp() の 間 で 変 更 さ れ て い る 。 | ||
• |
volatile と し て 宣 言 さ れ て い な い 。 同 様 の 注 意 が siglongjmp() に も あ て は ま る 。
longjmp() や siglongjmp() を 使 う と 、 プ ロ グ ラ ム は 理 解 し づ ら く 、 保 守 し に く い も の に な る 。 別 の 方 法 が 可 能 な ら 、 そ れ を 使 う べ き で あ る 。
関 連 項 目
こ の 文 書 に つ い て
こ の man ペ ー ジ は Linux man−pages プ ロ ジ ェ ク ト の リ リ ー ス 3.79 の 一 部 で あ る 。 プ ロ ジ ェ ク ト の 説 明 と バ グ 報 告 に 関 す る 情 報 は http://www.kernel.org/doc/man−pages/ に 書 か れ て い る 。