C ライブラリの signal() 関数と追加の型引数によりサポートされる ISO 準拠のシグナルの実装

Table 11 は、signal() 関数によってサポートされるシグナルを示しています。どのシグナルが、生成された状況に関する詳細情報を取得する追加の引数を使用するかについても示しています。追加の引数は、__raise()type パラメータで指定します。例えば、ゼロ除算の結果は、SIGFPE (signal == 2) シグナル、および対応する追加の引数 FE_EX_DIVBYZERO (type == 2) です。

Table 11. signal() 関数でサポートされるシグナル

信号説明追加引数
SIGABRT1

負の配列サイズが new 演算子で割り当てられているなど、

  • トラップされていない例外がスローされた場合に返されます。

  • 無効なダイナミックキャスト

このシグナルは、C++ アプリケーションが abort() または assert() を呼び出し、--exceptions が指定された場合にのみ使用されます。

なし
SIGFPE2ゼロによる除算などの算術例外を通知するために使用されます。ハードウェアおよびソフトウェア浮動小数点と整数除算に使用されます。{FE_EX_INEXACT, FE_EX_UNDERFLOW, FE_EX_OVERFLOW, FE_EX_DIVBYZERO, FE_EX_INVALID, DIVBYZERO} からのビット群
SIGILL[a]3不正な命令なし
SIGINT [a]4ユーザからのアテンション要求なし
SIGSEGV [a]5不正なメモリアクセスなし
SIGTERM [a]6終了要求なし
SIGSTAK7廃止なし
SIGRTRED8ランタイムライブラリの入出力ストリームでリダイレクトが失敗した標準ストリームをリダイレクトするために再度開かれたファイルまたはデバイスの名前
SIGRTMEM9初期化中または破損後のヒープ空間の不足失敗した要求のサイズ
SIGUSR110ユーザ定義ユーザ定義
SIGUSR211ユーザ定義ユーザ定義
SIGPVFN12C++ から純仮想関数が呼び出された-
SIGCPPL13

通常は使用しない。

-
SIGOUTOFHEAP[b]14ヒープ空間の不足。C++ 関数 ::operator new によって返されます。失敗した要求のサイズ
予約15-31予約予約
その他> 31ユーザ定義ユーザ定義

[a] このシグナルはライブラリで生成されることはありません。必要な場合は、手動で作成できます。

[b] RVCT 2.1 以降では使用しない。


SIGSTAK signal.h 内に収録されていますが、このシグナルは C ライブラリによって生成されなくなっており、廃止されたものと見なされています。

SIGUSR2 よりも大きなシグナル番号は、__raise() を使用すれば渡すことができ、デフォルトのシグナルハンドラでは捕捉できますが、signal() を使用して登録されるハンドラでは捕捉できません。

SIGUSR2 よりも大きなシグナル番号用のハンドラを登録しようとすると、signal() によってエラーコードが返されます。

認識されたすべてのシグナルのデフォルト処理では、診断メッセージが出力され、exit() を呼び出します。このデフォルトの動作は、変更しない限りプログラムの起動時に適用されます。

Caution

浮動小数点の処理に関する IEEE 754 標準では、例外に対するデフォルトのアクションとしてトラップなしで続行することが定義されています。デフォルトでは、浮動小数点演算で発生した例外によって SIGFPE が生成されることはありません。fenv.h 内の関数と定義をカスタマイズすることで、浮動小数点エラーの処理方法を修正することができます。ただし、--fpmode=ieee_fixed より上位の、デフォルト以外の FP モデルを指定して、これらの関数をコンパイルする必要があります。

Table 11に示すすべてのシグナルにおいて、シグナルの発生時にハンドラによって関数が参照されている場合は、ハンドラへの呼び出しの前に signal(sig, SIG_DFL) と等価の処理が実行されます。

SIGILL シグナルが signal() 関数によって指定されたハンドラに受信されると、デフォルトの処理がリセットされます。

Show/hide関連項目

Copyright © 2010-2011 ARM. All rights reserved.ARM DUI 0475EJ
Non-ConfidentialID081711