SETJMP(3)

名前
setjmp, sigsetjmp - ローカルでないジャンプ(goto) のために、 スタックコンテキスト(stack context) を保存する。

書式
#include <setjmp.h>

int setjmp(jmp_buf env);
int sigsetjmp(sigjmp_buf env, int savesigs);

説明
setjmp() と longjmp() は、プログラムの低レベルなサブルーチン において、エラーや割り込みが発生した時の処理に便利である。 setjmp() は、longjmp() によって使われる env に スタックコンテキスト/スタック環境を保存する。 setjmp() を呼び出した 関数が返るとき、スタックコンテキストは無効になる。

sigsetjmp() は setjmp() に似ている。 もし、 savesigs がゼロでないなら、阻止(block)されているシグナルも env に保存され、 後に siglongjmp() が env とともに行われたなら、元に戻される。

返り値
直接返ってくるときは、setjmp() と sigsetjmp() は 0 を返し、 コンテキストを保存した longjmp() から返ってくるときは、ゼロ以外を返す。

準拠
POSIX

注意
POSIX は、 setjmp がシグナルコンテキスト(signal context) を保存すべきか どうか特定していない。 もし、シグナルマスクを保存したいのなら、 sigsetjmp を使う。

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

関連項目
longjmp(3), siglongjmp(3)