  | 
≫  | 
 | 
  
 | 
    
      | 
    
    
    
     
HP OpenVMS HP C ランタイム・ライブラリ・リファレンス・マニュアル (上巻)
  
 
 
OpenVMS Alpha のシグナル処理に関する注意 (Alpha only) 
 
-  OpenVMS VAX システムに存在するシグナルはすべて OpenVMS Alpha システムにも存在しますが,対応する OpenVMS 例外とコードは,多くの場合異なります。これは,Alpha プロセッサでは,2 つの新しい OpenVMS 例外が追加され,複数の例外が無効になったからです。
 -  OpenVMS Alpha システムのすべての浮動小数点例外は, OpenVMS 例外 SS$_HPARITH ( 高性能算術演算トラップ ) によって通知されます。発生した特定のタイプのトラップは,例外サマリ・ロングワードを使用することによって HP C RTL で変換されます。このロングワードは,高性能算術演算トラップが通知されるときに設定されます。
  
 
 | 
 
 
 
 
表 4-5 HP C RTLのシグナルと対応する OpenVMS Integrity 例外 (Integrity only)  
 
| 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-1 は,
signal,
alarm,
pause関数の動作方法を示しています。また,プログラムの終了を防止するために,シグナルを検出するようにシグナル・ハンドラを設定する方法も示しています。
 
 
 
 
/*    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>
 |  
 
 
 
 
      |