tail head cat sleep
QR code linking to this page

manページ  — SETJMP

名称

sigsetjmp, siglongjmp, setjmp, longjmp, _setjmp, _longjmp, longjmperror – 非局所分岐

内容

ライブラリ

Standard C Library (libc, -lc)

書式

#include <setjmp.h>

int
sigsetjmp(sigjmp_buf env, int savemask);

void
siglongjmp(sigjmp_buf env, int val);

int
setjmp(jmp_buf env);

void
longjmp(jmp_buf env, int val);

int
_setjmp(jmp_buf env);

void
_longjmp(jmp_buf env, int val);

void
longjmperror(void);

解説

sigsetjmp(), setjmp() および _setjmp() 関数は、呼び出し元の環境を env に保存します。これらの関数はどれも 0 を返します。

対応する longjmp() 関数は、それぞれ最も新しい setjmp() 関数呼び出しによって保存された環境を復元します。 longjmp() 関数はその後で復帰するので、対応する setjmp() 呼び出しが、0 ではなく val で指定された値を返したばかりであるかのように プログラムの実行が継続します。

呼び出しのペアはお互いに混合できます。すなわち、 sigsetjmp() と siglongjmp() および setjmp() と longjmp() の各組み合わせは、同じプログラム内で使用できます。 しかし、個々の呼び出しは混合することはできません。 たとえば、 setjmp() に渡される env 引数は siglongjmp() に渡すことはできません。

longjmp() ルーチンは、 setjmp() を呼び出したルーチンから復帰した後では 呼び出すことはできません。

アクセス可能なオブジェクトはすべて longjmp() ルーチンが呼び出された時点での値を持ちます。 ただし例外として、自動記憶域期間継続するオブジェクトであり、 volatile 型ではなく、かつ setjmp() 呼び出しと longjmp() 呼び出しとの間で変更されるものについて、 その値が不定になることは除きます。

setjmp()/longjmp() のペアはシグナルマスクを保存し復元しますが、 _setjmp()/_longjmp() のペアはレジスタセットとスタックしか保存および復元しません ( sigprocmask(2) を参照 ) 。

sigsetjmp()/siglongjmp() 関数のペアは、引数 savemask が 0 でない場合、シグナルマスクを保存および復元します。 0 である場合は、レジスタセットとスタックのみが保存されます。

エラー

env の内容が破壊されている場合、または既に復帰した環境に対応している場合、 longjmp() ルーチンは、 longjmperror(3) を呼び出します。 longjmperror() から復帰すると、プログラムは中止します ( abort(3) を参照 ) 。 longjmperror() のデフォルトバージョンでは "longjmp botch" メッセージを標準エラー出力に印字して復帰します。 ユーザプログラムがもっと行儀よく脱出することを望むなら、 独自バージョンの longjmperror() を書くべきです。

関連項目

sigaction(2), sigaltstack(2), signal(3)

規格

setjmp() 関数と longjmp() 関数は ISO/IEC 9899:1990 ("ISO C90") に適合しています。 sigsetjmp() 関数と siglongjmp() 関数は IEEE Std 1003.1-88 ("POSIX.1") に適合しています。

SETJMP (3) June 4, 1993

tail head cat sleep
QR code linking to this page


このマニュアルページサービスについてのご意見は Ben Bullock にお知らせください。 Privacy policy.