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


前へ 次へ 目次 索引



第 4 章
エラー処理とシグナル処理

表 4-1 は, HP C Run-Time Library (RTL) で提供されるすべてのエラー処理関数とシグナル処理関数を示しています。各関数の詳細については,『HP C ランタイム・ライブラリ・リファレンス・マニュアル (下巻)』「リファレンス・セクション」を参照してください。

表 4-1 エラー処理関数とシグナル処理関数
関数 説明
abort プログラムの実行を終了するシグナル SIGABRT を送出する。
assert 診断情報をプログラムに渡す。
atexit プログラムの終了時に呼び出す関数を登録する。
exit, _exit 現在のプログラムを終了する。
perror 現在の errno の値を記述する短いエラー・メッセージを stderr に出力する。
strerror errno のエラー・コードをエラー・メッセージ文字列に変換する。
alarm 引数によって示される秒数が経過した後,シグナル SIGALARM を起動プロセスに送信する。
gsignal 指定されたソフトウェア・シグナルを生成する。
kill process ID によって指定されるプロセスに SIGKILL シグナルを送信する。
longjmp 正常終了せずに,制御をネストした一連の関数呼び出しから定義済みポイントに返す。
pause シグナルを受信するまでプロセスを待機させる。
raise 指定されたシグナルを生成する。
setjmp 正常終了せずに,ネストした一連の関数呼び出しから後で制御を転送するためにコンテキストを設定する。
sigaction シグナルの配布時に実行する動作を指定する。
sigaddset 指定された個々のシグナルを追加する。
sigblock 引数に指定されたシグナルを,配布がブロックされている現在のシグナル・セットに追加する。
sigdelset 指定された個々のシグナルを削除する。
sigemptyset すべてのシグナルを除外するようにシグナル・セットを初期化する。
sigfillset すべてのシグナルを含むようにシグナル・セットを初期化する。
sighold 指定されたシグナルを,呼び出し元プロセスのシグナル・マスクに追加する。
sigignore 指定されたシグナルの処理方法として,SIG_IGN を設定する。
sigismember 指定されたシグナルがシグナル・セットのメンバであるかどうか判定する。
siglongjmp シグナルを処理して非ローカル・ジャンプを実行する。
sigmask 指定されたシグナル番号に対してマスクを作成する。
signal シグナルを検出するか,または無視する。
sigpause 指定されたシグナル・セットをブロックし,ブロックされていないシグナルを待機する。
sigpending 保留状態のシグナルを調べる。
sigprocmask 現在のシグナル・マスクを設定する。
sigrelse 指定されたシグナルを,呼び出し元プロセスのシグナル・マスクから削除する。
sigsetjmp 非ローカル・ジャンプのジャンプ・ポイントを設定する。
sigsetmask 配布がブロックされるシグナルを設定する。
sigstack シグナルを処理する代替スタックを定義する。
sigsuspend ブロックされているシグナル・セットを個別に変更し,シグナルを待機する。
sigtimedwait 呼び出し元スレッドを一時停止し,シグナル通知が到着するのを待機する。
sigvec 特定のシグナルのハンドラを永久的に割り当てる。
sigwait 呼び出し元スレッドを一時停止し,シグナル通知が到着するのを待機する。
sigwaitinfo 呼び出し元スレッドを一時停止し,シグナル通知が到着するのを待機する。
ssignal 特定のシグナルが発生したときに実行する動作を指定することができる。
VAXC$ESTABLISH HP C RTL の例外処理と互換性のある方法でアプリケーション例外ハンドラを設定する。

4.1 エラー処理

HP C RTL 関数の呼び出しでエラーが発生した場合,その関数は異常終了状態を返します。多くの RTL ルーチンは,外部変数 errnoを,障害の理由を示す値に設定します。エラーが発生した場合は,戻り値を常に確認する必要があります。

<errno.h>ヘッダ・ファイルには errnoが宣言され,可能なエラー・コードがシンボルで定義されています。 <errno.h>ヘッダ・ファイルをプログラムに取り込むことにより, HP C RTL 関数呼び出しの後,特定のエラー・コードを確認することができます。

プログラムの起動時に, errnoの値は 0 です。 errnoの値は,多くの HP C RTL 関数によって 0 以外の値に設定される可能性があります。 errnoの値が HP C RTL 関数によって 0 にリセットされることはないため,この値を正しく使用するには, HP C RTL 関数を呼び出し,異常終了状態が返された後で使用するようにしなければなりません。 表 4-2 は, HP C RTL が errnoに代入する可能性のあるシンボル値を示しています。

表 4-2 エラー・コードのシンボル値
シンボル定数 説明
E2BIG 引数リストが長すぎる。
EACCES アクセス許可が拒否された。
EADDRINUSE 指定されたアドレスはすでに使用されている。
EADDRNOTAVAIL 要求されたアドレスを割り当てることができない。
EAFNOSUPPORT サポートされていないアドレス・ファミリ。
EAGAIN これ以上プロセスは存在しない。
EALIGN アライメント・エラー。
EALREADY 操作はすでに実行中である。
EBADF ファイル番号が不正である。
EBADCAT メッセージ・カタログの形式が不正である。
EBADMSG 壊れたメッセージが検出された。
EBUSY ビジー状態のデバイスをマウントした。
ECANCELED 操作がキャンセルされた。
ECHILD 子は存在しない。
ECONNABORTED ソフトウェアで接続アボートが発生した。
ECONNREFUSED 接続が拒否された。
ECONNRESET 接続相手から接続がリセットされた。
EDEADLK リソース・デッドロックが回避された。
EDESTADDRREQ 宛先アドレスが必要である。
EDOM 算術演算引数。
EDQUOT ディスク・クォータ超過。
EEXIST ファイルはすでに存在する。
EFAIL 操作を開始できない。
EFAULT アドレスが不正である。
EFBIG ファイルが大きすぎる。
EFTYPE ファイル・タイプに対して不適切な操作が実行された。
EHOSTDOWN ホストがダウンしている。
EHOSTUNREACH ホストにルーティングできない。
EIDRM 識別子が削除された。
EILSEQ バイト・シーケンスが不正である。
EINPROGRESS 操作が現在実行中である。
EINPROG 非同期操作が現在実行中である。
EINTR システム呼び出しが中断された。
EINVAL 引数が不正である。
EIO I/O エラー。
EISCONN ソケットはすでに接続されている。
EISDIR ディレクトリである。
ELOOP シンボリック・リンクのレベルが多すぎる。
EMFILE オープンされているファイルの数が多すぎる。
EMLINK リンクの数が多すぎる。
EMSGSIZE メッセージが長すぎる。
ENAMETOOLONG ファイル名が長すぎる。
ENETDOWN ネットワークがダウンしている。
ENETRESET リセット時にネットワークで接続が切断された。
ENETUNREACH ネットワークに到達できない。
ENFILE ファイル・テーブル・オーバフロー。
ENOBUFS 使用可能なバッファ領域が残っていない。
ENODEV このようなデバイスは存在しない。
ENOENT このようなファイルまたはディレクトリは存在しない。
ENOEXEC Exec フォーマット・エラー。
ENOLCK 使用可能なロックが存在しない。
ENOMEM 十分なコアがない。
ENOMSG 適切なタイプのメッセージがない。
ENOPROTOOPT プロトコルは使用できない。
ENOSPC デバイスに領域が残されていない。
ENOSYS この関数はインプリメントされていない。
ENOTBLK ブロック・デバイスが必要である。
ENOTCONN ソケットが接続されていない。
ENOTDIR ディレクトリでない。
ENOTEMPTY ディレクトリが空でない。
ENOTSOCK ソケット以外のものに対してソケット操作を実行した。
ENOTSUP この関数はインプリメントされていない。
ENOTTY タイプライタでない。
ENWAIT 待機中のプロセスは存在しない。
ENXIO このようなデバイスまたはアドレスは存在しない。
EOPNOTSUPP ソケットでこの操作はサポートされていない。
EPERM オーナでない。
EPFNOSUPPORT サポートされていないプロトコル・ファミリ。
EPIPE パイプが壊れている。
EPROCLIM プロセスの数が多すぎる。
EPROTONOSUPPORT プロトコルがサポートされていない。
EPROTOTYPE ソケットに対してプロトコルのタイプが不正である。
ERANGE 結果が大きすぎる。
EREMOTE パス内のリモートのレベルが多すぎる。
EROFS 読み込み専用ファイル・システム。
ESHUTDOWN ソケット・シャットダウンの後で送信することはできない。
ESOCKTNOSUPPORT サポートされていないソケット・タイプ。
ESPIPE 不正なシーク。
ESRCH このようなプロセスは存在しない。
ESTALE 無効な NFS ファイル・ハンドル。
ETIMEDOUT 接続時間切れ。
ETOOMANYREFS 参照の数が多すぎる,分割できない。
ETXTBSY テキスト・ファイルが使用中である。
EUSERS ユーザの数が多すぎる。
EVMSERR OpenVMS 固有の変換不可能なエラー・コード。
EWOULDBLOCK I/O 操作はチャネルをブロックする。
EXDEV クロスデバイス・リンク。

perror関数または strerror関数を使用すると,エラー・コードを, UNIX システムで使用されているメッセージに類似したメッセージに変換できます。 errnoが EVMSERR に設定されている場合は, perrorはエラー・コードを変換することができず,次のメッセージを印刷し,その後,値に対応する OpenVMS エラー・メッセージを印刷します。


%s:nontranslatable vms error code: xxxxxx vms message: 

このメッセージで,%s は perrorに指定する文字列です。 xxxxxx は OpenVMS 条件値です。

errnoが EVMSERR に設定されている場合は, <errno.h>ヘッダ・ファイルに宣言されている vaxc$errno変数で OpenVMS 条件値を使用できます。 vaxc$errno変数は, errnoが EVMSERR に設定されている場合にだけ,有効な値を持つことが保証されます。 errnoが EVMSERR 以外の値に設定されている場合は, vaxc$errnoの値は未定義です。

エラー・コードを変換するための別の方法については,『HP C ランタイム・ライブラリ・リファレンス・マニュアル (下巻)』「リファレンス・セクション」の strerror関数を参照してください。


前へ 次へ 目次 索引