Manpages

名 前

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() を 使 う と 、 プ ロ グ ラ ム は 理 解 し づ ら く 、 保 守 し に く い も の に な る 。 別 の 方 法 が 可 能 な ら 、 そ れ を 使 う べ き で あ る 。

関 連 項 目

setjmp(3), sigsetjmp(3)

こ の 文 書 に つ い て

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