|
≫ |
|
|
|
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>
|
|