arrow 若葉プログラミング塾 > 知識の玉手箱 > C関数リファレンス > ヘッダファイル一覧 >
signal.h
signal.h

このヘッダの目的

<signal.h>は、シグナル処理をする助けになる。

定義済み識別子

この他に、"SIG"で始まり4文字目が英大文字か、"SIG_"で始まり5文字目が英大文字である識別子は定義されている可能性がある。

働き

シグナルとは、通常の実行の流れを中断して、他の処理を実行するのに使われる、プログラムに対する信号である。 普通シグナルは異常事態に発生し、プログラムを終了するが、その他の使い方をすることもできる。

シグナルの種類はシグナルハンドラと呼ばれる正の整数で表され、SIGではじまる識別子はシグナルハンドラの一つを表すマクロである。

シグナルが発生すると、そのシグナルハンドラに応じた関数が呼ばれる。 この種類と関数の対応はプログラマがsignal()を使うことでカスタマイズできる。

シグナルは実行中にエラーが起きたときに発生するが、raise()を使って明示的に発生させることもできる。

sig_atomic_t型は、「非同期割り込みの際にも参照可能な不可分実体」というふうに規格で定義されているが、 普段は使う必要はない。

SIG_DFL、SIG_ERR、SIG_IGNは、signal()の第二引数に渡せる型に展開されるマクロである。 つまり、void (*)(int)関数のポインタ型である。これらは宣言可能などんな関数とも違うアドレスを指している。

以下のマクロは対応するシグナルハンドラに展開される。

  • SIGABRT abort()に引き起こされるような異常な中断。
  • SIGFPE 数値演算におけるエラー。例えばゼロ除算やオーバーフローを起こす演算など。
  • SIGILL 正しくない関数イメージの検出。例えば知られていないインストラクションなど。
  • SIGINT 外部からの干渉に使われるシグナル。
  • SIGSEGV 不正な記憶域への参照。
  • SIGTERM プログラムへの終了要求。

arrow 若葉プログラミング塾 > 知識の玉手箱 > C関数リファレンス > ヘッダファイル一覧 >
KC