EN JA
SETJMP(3)
SETJMP(3) Linux Programmer's Manual SETJMP(3)

名前

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(3) を使うこと。

setjmp() や sigsetjmp() を使うと、プログラムは理解しづらく、保守しにくいものになる。別の方法が可能なら、それを使うべきである。

関連項目

longjmp(3), siglongjmp(3)

この文書について

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