SIMPLE SOLUTIONS

LONGJMP(3) - Linux manual

保存されたスタックコンテキスト (stack context) への非局所的なジャンプ.

2009-01-13
LONGJMP(3) Linux Programmer's Manual LONGJMP(3)

longjmp, siglongjmp - 保存されたスタックコンテキスト (stack context) への非局所的なジャンプ

#include <setjmp.h> void longjmp(jmp_buf env, int val); void siglongjmp(sigjmp_buf env, int val); glibc 向けの機能検査マクロの要件 (feature_test_macros(7) 参照): siglongjmp(): _POSIX_C_SOURCE >= 1 || _XOPEN_SOURCE || _POSIX_C_SOURCE

longjmp() と setjmp(3) は、プログラムの低レベルなサブルーチンにおいて、 エラーや割り込みが発生した時の処理に便利である。 longjmp() は、env 引き数を指定して呼び出された最後の setjmp(3) によって保存された環境を復元する。 longjmp() の完了後、プログラムの実行は、まるで対応する setjmp(3) の呼び出しが値 val で返って来たかように続行される。 longjmp() は 0 を返すように指示することはできない。 二番目の引き数に 0 を指定して longjmp() が呼ばれた場合は、代わりに 1 が返されることになる。 siglongjmp() は、引き数 env の型が異なる点以外は、 longjmp() と同様である。 env を保存した sigsetjmp(3) が 0 以外の savesigs フラグで呼び出されていた場合で、 かつ、その場合にのみ、 siglongjmp(3) は sigsetjmp(3) より保存されていたシグナルマスクの復元を行う。

これらの関数が返ることはない。

longjmp() は C89, C99, POSIX.1-2001 で規定されている。 siglongjmp() は POSIX.1-2001 で規定されている。

POSIX では、 longjmp() がシグナルコンテキスト (signal context) を復元 するかどうか規定されていない (setjmp(3) にも少し詳しい情報がある)。 移植性のある方法で、シグナルマスクを保存し復元させたい場合には、 sigsetjmp(3) と sig‐ longjmp() を使うこと。 以下の条件が全て成立する場合、 longjmp() の呼び出しが行われた後の自動変数の値は未定義 (unspecified) となる。 · その自動変数が、対応する setjmp(3) 呼び出しを行った関数のローカル変数である。 · 自動変数の値が setjmp(3) と longjmp() の間で変更されている。 · volatile として宣言されていない。 同様の注意が siglongjmp() にもあてはまる。 longjmp() や siglongjmp() を使うと、プログラムは理解しづらく、保守しにくいものになる。 別の方法が可能なら、それを使うべきである。

setjmp(3), sigsetjmp(3)

この man ページは Linux man-pages プロジェクトのリリース 3.79 の一部 である。プロジェクトの説明とバグ報告に関する情報は http://www.kernel.org/doc/man-pages/ に書かれている。
2009-01-13 LONGJMP(3)
longjmp(3).txt (日本語 / Japanese)
Index English version of longjmp(3)
Go top