Provided by: manpages-ja-dev_0.5.0.0.20221215+dfsg-1_all bug

名前

       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)