SETJMP
Section: Linux Programmer's Manual (3)
Updated: 2009-06-26
Index
JM Home Page
roff page
名前
setjmp, sigsetjmp - 非局所的なジャンプのために、スタックコンテキスト (stack context) を保存する
書式
#include <setjmp.h>
int setjmp(jmp_buf env);
int sigsetjmp(sigjmp_buf env, int savesigs);
glibc 向けの機能検査マクロの要件
(feature_test_macros(7)
参照):
setjmp():
「注意」参照。
sigsetjmp():
_POSIX_C_SOURCE >= 1 || _XOPEN_SOURCE || _POSIX_C_SOURCE
説明
setjmp()
と
longjmp(3)
は、プログラムの低レベルなサブルーチン
において、エラーや割り込みが発生した時の処理に便利である。
setjmp()
は、
longjmp(3)
によって使われる env に
スタックコンテキスト/スタック環境を保存する。
setjmp()
を呼び出した
関数が返るときに、そのスタックコンテキストは無効になる。
sigsetjmp()
も
setjmp()
と同様である。
savesigs が 0 以外の場合、
このプロセスの現在のシグナルマスクも env に保存され、
このシグナルは後で
siglongjmp(3)
がこの env で実行された際に復元される。
返り値
直接返ってくるときは、
setjmp()
と
sigsetjmp()
は 0 を返し、保存したコンテキストを使って
longjmp(3)
や
siglongjmp(3)
から返ってくるときは 0 以外を返す。
準拠
setjmp()
は C89, C99, POSIX.1-2001 で規定されている。
sigsetjmp()
は POSIX.1-2001 で規定されている。
注意
POSIX は、
setjmp()
がシグナルマスクを保存すべきかどうかを規定していない。
System V では保存しない。
4.3BSD では保存する;
4.3BSD にはシグナルコンテキストを保存しない関数 _setjmp もある。
デフォルトでは、Linux/glibc は System V の振る舞いに従うが、
_BSD_SOURCE
機能検査マクロが定義され、
_POSIX_SOURCE,
_POSIX_C_SOURCE,
_XOPEN_SOURCE,
_XOPEN_SOURCE_EXTENDED,
_GNU_SOURCE,
_SVID_SOURCE
のいずれも定義されていない時は BSD の振る舞いとなる。
移植性のある形でシグナルマスクを保存および復元したいのなら、
sigsetjmp()
と
siglongjmp()
を使うこと。
setjmp()
や
sigsetjmp()
を使うと、プログラムは理解しづらく、保守しにくいものになる。
別の方法が可能なら、それを使うべきである。
関連項目
longjmp(3),
siglongjmp(3)
Index
- 名前
-
- 書式
-
- 説明
-
- 返り値
-
- 準拠
-
- 注意
-
- 関連項目
-
This document was created by
man2html,
using the manual pages.
Time: 03:26:54 GMT, April 25, 2010