SETJMP
Section: Linux Programmer's Manual (3)
Updated: 2014-01-07
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 は、 (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/ に書かれている。
 Index
- 名前
 - 
 - 書式
 - 
 - 説明
 - 
 - 返り値
 - 
 - 準拠
 - 
 - 注意
 - 
 - 関連項目
 - 
 - この文書について
 - 
 
This document was created by
man2html,
using the manual pages.
Time: 16:46:42 GMT, November 24, 2023