|
≫ |
|
|
|
HP OpenVMS HP C ランタイム・ライブラリ・リファレンス・マニュアル (下巻)
非ローカル goto のジャンプ・ポイントを設定します。
形式
#include <setjmp.h>
init sigsetjmp (sigjmp_buf env, int
savemask);
引数
env
sigjmp_buf構造体のアドレス。
savemask現在のシグナル・マスクを保存する必要があるかどうかを指定する整数値。
説明
sigsetjmp関数は,呼び出し元環境を,後に
siglongjmp関数で使用できるように env 引数に保存します。
savemask の値が 0 (ゼロ) でない場合,
sigsetjmpはプロセスの現在のシグナル・マスクも,呼び出し元環境の一部として保存します。
siglongjmpも参照してください。
制限事項 | |
OpenVMS 条件ハンドラから
longjmp関数を呼び出すことはできません。ただし,以下のネスト制約の範囲内で,
HP C RTL がサポートしている任意のシグナルに対して確立されたシグナル・ハンドラから
longjmpを呼び出すことができます。
-
longjmp関数は,ネストしたシグナル・ハンドラから呼び出された場合には動作しない。他のシグナル・ハンドラ内で生成された例外の結果として実行されたシグナル・ハンドラから呼び出された
longjmp関数の結果は未定義である。
- 対応する
longjmpを,シグナルの処理が完了する前に発行したい場合を除いて,シグナル・ハンドラから
sigsetjmp関数を呼び出してはならない。
- 終了ハンドラ (
atexitまたは SYS$DCLEXH で設定) の中から
longjmp関数を呼び出してはならない。終了ハンドラはイメージのティアダウンの後に呼び出されるので,
longjmpのデスティネーション・アドレスは存在しなくなっている。
- シグナル・ハンドラの中から,メインの実行スレッドに戻るために
longjmpを呼び出すと,プログラムの状態の一貫性が失われることがある。副作用として,I/O が実行できなくなったり, UNIX シグナルを受信できなくなったりする可能性がある。代わりに
siglongjmpを使用すること。
戻り値
0
|
成功を示します。
|
ゼロ以外
|
siglongjmp
関数の呼び出しが行われます。
|
|