LONGJMP
Section: Linux Programmer's Manual (3)
Updated: 2009-01-13
Index
JM Home Page
roff page
名前
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)
Index
- 名前
-
- 書式
-
- 説明
-
- 返り値
-
- 準拠
-
- 注意
-
- 関連項目
-
This document was created by
man2html,
using the manual pages.
Time: 03:26:47 GMT, April 25, 2010