Museum

Home

Lab Overview

Retrotechnology Articles

Online Manuals

⇒ longjmp(3) — NEWS-os 4.2.1R

Media Vault

Software Library

Restoration Projects

Artifacts Sought

Related Articles

sigvec(2)

sigstack(2)

signal(3)

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

Typewritten Software • bear@typewritten.org • Edmonds, WA 98026