日本-日本語
≫  お問い合わせ

製品とサービス >  ソフトウェアとOS >  OpenVMS >  マニュアル

OpenVMS マニュアル


≫ 

OpenVMS V8.3
ライブラリ

タイトルページ
目次
まえがき
第 1 章:はじめに
第 2 章:入出力について
第 3 章:文字/文字列/引数リスト関数
第 4 章:エラー処理とシグナル処理
第 5 章:サブプロセス関数
第 6 章:Curses画面管理関数とマクロ
第 7 章:算術関数
第 8 章:メモリ割り当て関数
第 9 章:システム関数
第 10 章:国際化ソフトウェアの開発
第 11 章:日付/時刻関数
第 12 章:シンボリックリンクとPOSIXパス名
付録 A:各OSバージョンでサポートする関数一覧
付録 B:非標準ヘッダに複製されているプロトタイプ
索引
PDF
OpenVMS ホーム

HP OpenVMS
HP C ランタイム・ライブラリ・リファレンス・マニュアル (上巻)


目次 索引

HP C RTL では,OpenVMS 例外を使用して setjmp関数と longjmp関数を実装しています。 longjmp関数を呼び出すと, C$_LONGJMP OpenVMS 例外が通知されます。 C$_LONGJMP 例外がユーザ例外ハンドラによって妨害されるのを防止するには, LIB$ESTABLISHを呼び出す代わりに, VAXC$ESTABLISHルーチンを使用してユーザ OpenVMS 例外ハンドラを設定します。 C$_LONGJMP ニーモニックは <errnodef.h>ヘッダ・ファイルに定義されています。

C プログラムで OpenVMS 例外ハンドラと UNIX シグナルを使用する場合は,表 4-4 (VAX only) および表 4-5 (Alpha only) に示した OpenVMS 例外を受け付けて再通知するように, OpenVMS 例外ハンドラを準備する必要があり,さらに HP C RTL の将来のバージョンで導入される可能性のある C$ 機能例外や C$_LONGJMP 例外も受け付けるようにしなければなりません。これは,UNIX シグナルがコンテキストでグローバルであるのに対し, OpenVMS 例外がスタック・フレーム・ベースだからです。

したがって,OpenVMS 例外ハンドラは, main ルーチンの HP C RTL 例外ハンドラより前に, UNIX シグナルに対応する例外を常に受け取ります。 OpenVMS 例外を再通知することにより, HP C RTL 例外ハンドラは例外を受け取ることができます。 OpenVMS 例外をインターセプトすることも可能ですが,その場合は,対応する UNIX シグナルを禁止します。

表 4-5 HP C RTLのシグナルと対応する OpenVMS Alpha 例外 (Alpha only)
名前 OpenVMS 例外 シグナルを生成するイベント コード
SIGABRT SS$_OPCCUS abort 関数 --
SIGALRM SS$_ASTFLT alarm 関数 --
SIGBUS SS$_ACCVIO アクセス違反 --
SIGBUS SS$_CMODUSER 変更モード・ユーザ --
SIGCHLD C$_SIGCHLD 子プロセスの停止 --
SIGEMT SS$_COMPAT 互換性モード・トラップ --
SIGFPE SS$_DECDIV 10 進数除算トラップ FPE_DECDIV_TRAP
SIGFPE SS$_DECINV 10 進数不正オペランド・トラップ FPE_DECINV_TRAP
SIGFPE SS$_DECOVF 10 進オーバフロー・トラップ FPE_DECOVF_TRAP
SIGFPE SS$_HPARITH 0 による浮動小数点/ 10 進数除算 FPE_FLTDIV_TRAP
SIGFPE SS$_HPARITH 浮動小数点オーバフロー・トラップ FPE_FLTOVF_TRAP
SIGFPE SS$_HPARITH 浮動小数点アンダフロー・トラップ FPE_FLTUND_TRAP
SIGFPE SS$_HPARITH 整数オーバフロー FPE_INTOVF_TRAP
SIGFPE SS$_HPARITH 不正なオペランド FPE_INVOPR_TRAP
SIGFPE SS$_HPARITH 不正確な結果 FPE_INXRES_TRAP
SIGFPE SS$_INTDIV 0 による整数除算 FPE_INTDIV_TRAP
SIGFPE SS$_SUBRNG 範囲外の添字 FPE_SUBRNG_TRAP
SIGFPE SS$_SUBRNG1 範囲外の添字 1 FPE_SUBRNG1_TRAP
SIGFPE SS$_SUBRNG2 範囲外の添字 2 FPE_SUBRNG2_TRAP
SIGFPE SS$_SUBRNG3 範囲外の添字 3 FPE_SUBRNG3_TRAP
SIGFPE SS$_SUBRNG4 範囲外の添字 4 FPE_SUBRNG4_TRAP
SIGFPE SS$_SUBRNG5 範囲外の添字 5 FPE_SUBRNG5_TRAP
SIGFPE SS$_SUBRNG6 範囲外の添字 6 FPE_SUBRNG6_TRAP
SIGFPE SS$_SUBRNG7 範囲外の添字 7 FPE_SUBRNG7_TRAP
SIGHUP SS$_HANGUP データ・セット・ハングアップ --
SIGILL SS$_OPCDEC 予約命令 ILL_PRIVIN_FAULT
SIGILL SS$_ROPRAND 予約オペランド ILL_RESOP_FAULT
SIGINT SS$_CONTROLC OpenVMS Ctrl/C 割り込み --
SIGIOT SS$_OPCCUS カスタマ予約 op コード --
SIGKILL SS$_ABORT 外部シグナルのみ --
SIGQUIT SS$_CONTROLY raise 関数 --
SIGPIPE SS$_NOMBX メールボックスなし --
SIGPIPE C$_SIGPIPE 壊れたパイプ --
SIGSEGV SS$_ACCVIO 長さ違反 --
SIGSEGV SS$_CMODSUPR 変更モード・スーパバイザ --
SIGSYS SS$_BADPARAM システム呼び出しに対する不正な引数 --
SIGTERM 実装されていない -- --
SIGTRAP SS$_BREAK ブレークポイント・フォルト・インストラクション --
SIGUSR1 C$_SIGUSR1 raise 関数 --
SIGUSR2 C$_SIGUSR2 raise 関数 --
SIGWINCH 1 C$_SIGWINCH 2 raise 関数 --

1OpenVMS Version 7.3 以降のバージョンでサポートされる。
2C$_SIGWINCH が定義されていない場合は SS$_BADWINCNT (OpenVMS Version 7.3 より前のバージョン)。

OpenVMS Alpha のシグナル処理に関する注意 (Alpha only)

  • OpenVMS VAX システムに存在するシグナルはすべて OpenVMS Alpha システムにも存在しますが,対応する OpenVMS 例外とコードは,多くの場合異なります。これは,Alpha プロセッサでは,2 つの新しい OpenVMS 例外が追加され,複数の例外が無効になったからです。

  • OpenVMS Alpha システムのすべての浮動小数点例外は, OpenVMS 例外 SS$_HPARITH ( 高性能算術演算トラップ ) によって通知されます。発生した特定のタイプのトラップは,例外サマリ・ロングワードを使用することによって HP C RTL で変換されます。このロングワードは,高性能算術演算トラップが通知されるときに設定されます。

表 4-6 HP C RTLのシグナルと対応する OpenVMS I64 例外 (I64 only)
名前 OpenVMS 例外 シグナルを生成するイベント コード
SIGABRT SS$_OPCCUS abort 関数 --
SIGALRM SS$_ASTFLT alarm 関数 --
SIGBUS SS$_ACCVIO アクセス違反 --
SIGBUS SS$_CMODUSER 変更モード・ユーザ --
SIGCHLD C$_SIGCHLD 子プロセスの停止 --
SIGEMT SS$_COMPAT 互換性モード・トラップ --
SIGFPE SS$_DECOVF 10 進オーバフロー・トラップ FPE_DECOVF_TRAP
SIGFPE SS$_DECDIV 10 進数除算トラップ FPE_DECDIV_TRAP
SIGFPE SS$_DECINV 10 進数不正オペランド・トラップ FPE_DECINV_TRAP
SIGFPE SS$_FLTDENORMAL デノーマル・オペランド・フォルト FPE_FLTDENORMAL_FAULT
SIGFPE SS$_FLTDIV 0 による浮動小数点/10 進数除算 FPE_FLTDIV_TRAP
SIGFPE SS$_FLTDIV_F 0 による浮動小数点除算フォルト FPE_FLTDIV_FAULT
SIGFPE SS$_FLTINE 不正確操作トラップ FPE_FLTINE_TRAP
SIGFPE SS$_FLTINV 不正操作トラップ FPE_FLTINV_TRAP
SIGFPE SS$_FLTINV_F 不正操作フォルト FPE_FLTINV_FAULT
SIGFPE SS$_FLTOVF 浮動小数点オーバフロー・トラップ FPE_FLTOVF_TRAP
SIGFPE SS$_FLTUND 浮動小数点アンダフロー・トラップ FPE_FLTUND_TRAP
SIGFPE SS$_INTDIV 0 による整数除算 FPE_INTDIV_TRAP
SIGFPE SS$_INTOVF 整数オーバフロー FPE_INTOVF_TRAP
SIGFPE SS$_SUBRNG 添字の範囲 FPE_SUBRNG_TRAP
SIGHUP SS$_HANGUP データ・セット・ハングアップ --
SIGILL SS$_OPCDEC 予約命令 ILL_PRIVIN_FAULT
SIGILL SS$_ROPRAND 予約オペランド ILL_RESOP_FAULT
SIGINT SS$_CONTROLC OpenVMS Ctrl/C 割り込み --
SIGIOT SS$_OPCCUS カスタマ予約 op コード --
SIGKILL SS$_ABORT 外部シグナルのみ --
SIGQUIT SS$_CONTROLY raise 関数 --
SIGPIPE SS$_NOMBX メールボックスなし --
SIGPIPE C$_SIGPIPE 壊れたパイプ --
SIGSEGV SS$_ACCVIO 長さ違反 --
SIGSEGV SS$_CMODSUPR 変更モード・スーパバイザ --
SIGSYS SS$_BADPARAM システム呼び出しに対する不正な引数 --
SIGTERM 実装されていない -- --
SIGTRAP SS$_TBIT TBIT トレース・トラップ --
SIGTRAP SS$_BREAK ブレークポイント・フォルト命令 --
SIGUSR1 C$_SIGUSR1 raise 関数 --
SIGUSR2 C$_SIGUSR2 raise 関数 --
SIGWINCH C$_SIGWINCH raise 関数 --



4.3 プログラムの例

例 4-1 は, signalalarmpause関数の動作方法を示しています。また,プログラムの終了を防止するために,シグナルを検出するようにシグナル・ハンドラを設定する方法も示しています。

例 4-1 プログラムの一時停止と再開

/*    CHAP_4_SUSPEND_RESUME.C                                   */ 
 
/* This program shows how to alternately suspend and resume a   */ 
/* program using the signal, alarm, and pause functions.        */ 
 
#define SECONDS 5 
 
#include <stdio.h> 
#include <signal.h> 
 
int number_of_alarms = 5;       /*  Set alarm counter.            */ 
 
void alarm_action(int); 
 
main() 
{ 
    signal(SIGALRM, alarm_action); /*  Establish a signal handler. */ 
                                   /*  to catch the SIGALRM signal.*/ 
 
    alarm(SECONDS);     /* Set alarm clock for 5 seconds. */ 
 
    pause();    /*  Suspend the process until     * 
                 *  the signal is received.       */ 
} 
 
void alarm_action(int x) 
{ 
    printf("\t<%d\007>", number_of_alarms); /*  Print the value of  */ 
                                            /*  the alarm counter.  */ 
 
    signal(SIGALRM, alarm_action);      /*  Reset the signal.       */ 
 
    alarm(SECONDS);     /*  Set the alarm clock.      */ 
 
    if (--number_of_alarms)     /*  Decrement alarm counter.  */ 
        pause(); 
} 

例 4-1 から次の出力が生成されます。


$ RUN  EXAMPLE
       <5>   <4>   <3>   <2>   <1>


目次 索引

印刷用画面へ
プライバシー 本サイト利用時の合意事項 ウェブマスターに連絡