SETJMP

Section: Linux Programmer's Manual (3)
Updated: 2014-01-07
Index JM Home 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/ に書かれている。

関連キーワード

setjmp   コンテキスト   シグナル   スタック   マスク   復元   規定   System   sigsetjmp   検査   マクロ   局所   ジャンプ   stack   context   sigjmp   要件   macros   サブルーチン   割り込み   便利   環境   無効   公開   引き数

Linux マニュアル 一覧

関連するコマンド・関数

longjmp.3   setjmp.3   sigsetjmp.3   sigpause.3   getcontext.3   setcontext.3
 

Index

名前
書式
説明
返り値
準拠
注意
関連項目
この文書について

This document was created by man2html, using the manual pages.
Time: 04:39:07 GMT, October 11, 2026