Provided by: manpages-ja-dev_0.5.0.0.20180315+dfsg-1_all
名前
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 は、 (longjmp() 中で後で復元できるように) setjmp() がシグナルマスクを保存すべきかど うかを規定していない。 System V では保存しない。 4.3BSD では保存する; 4.3BSD にはシグナル コンテキストを保存しない関数 _setjmp もある。 バージョン 2.19 より前の glibc を使う Linux では、 setjmp() はデフォルトでは System V の振る舞いに従うが、 _BSD_SOURCE 機能検査マクロ が定義され、 _POSIX_SOURCE, _POSIX_C_SOURCE, _XOPEN_SOURCE, _XOPEN_SOURCE_EXTENDED, _GNU_SOURCE, _SVID_SOURCE のいずれも定義されていない時は BSD の振る舞いとなる。 glibc 2.19 以降では、 <setjmp.h> は System V 版の setjmp() のみを公開するようになっている。 BSD の動 作を必要とするプログラムでは、 setjmp() の呼び出しを、 savesigs 引き数に 0 以外の値を渡す sigsetjmp() に置き換えるべきである。 移植性のある形でシグナルマスクを保存および復元したいのなら、 sigsetjmp() と siglongjmp(3) を使うこと。 setjmp() や sigsetjmp() を使うと、プログラムは理解しづらく、保守しにくいものになる。 別 の方法が可能なら、それを使うべきである。
関連項目
longjmp(3), siglongjmp(3)
この文書について
この man ページは Linux man-pages プロジェクトのリリース 3.79 の一部 である。プロジェクト の説明とバグ報告に関する情報は http://www.kernel.org/doc/man-pages/ に書かれている。 2014-01-07 SETJMP(3)