SETJMP(3) — NEWS-OS Programmer’s Manual
名称
setjmp, longjmp − 非ローカル分岐
形式
#include <setjmp.h>
setjmp(env)
jmp_buf env;
longjmp(env, val)
jmp_buf env;
_setjmp(env)
jmp_buf env;
_longjmp(env, val)
jmp_buf env;
解説
これらのルーチンは、 プログラムの下位レベルのサブルーチンで発生したエラーおよび割り込みを 処理するのに有用です。
setjmp はあとで longjmp で使用するためにそのスタック環境を env に保存します。この関数は 0 を返します。
longjmp は最後に呼び出された setjmp によって保存されたスタック環境を復元します。 setjmp の呼び出しが setjmp を起動する関数へ値 val を返したかのように実行を続けるような方法で longjmp は終了します。 その間、途中で longjmp 自身は戻ることがありません。
アクセス可能なデータはすべて longjmp が呼ばれた時と同じ値を持ちます。
setjmp と longjmp はシグナルマスク sigmask(2) を保存、 復元します。 一方、 _setjmp と _longjmp は C のスタックとレジスタのみを操作します。
エラー
jmp_buf の内容が不良であるか、あるいは既に返されている環境と一致する場合、 longjmp は longjmperror ルーチンを呼び出します。 longjmperror が返るとプログラムは中止されます。 また、 longjmperror のデフォルトバージョンはメッセージ“longjmp botch”を 標準エラーに出力して戻ります。 ユーザのプログラムでより親切に終了することを 望む場合は独自の longjmperror バージョンを作成することもできます。
関連事項
sigvec(2), sigstack(2), signal(3)
NEWS-OSRelease 4.2.1R