[C言語 標準ライブラリ] signal.hの使い方

signal.hには、シグナル処理関数の登録およびシグナルの送信に関する型、マクロ、関数が宣言、定義されています。

スポンサーリンク

マクロ定数

SIG_DFL

シグナルに対する既定の操作を指示します。
signal関数の第2引数で使用されています。

SIG_ERR

エラーが発生したことを示します。
signal関数の戻り値で使用されます。

SIG_IGN

シグナルを無視することを指示します。
signal関数の第2引数で使用されます。

SIGABRT

異常終了を示すシグナル番号です。

SIGFPE

誤った算術演算(0除算、オーバーフロー等)を示すシグナル番号です。

SIGILL

不正な関数イメージの検出(不正命令等)を示すシグナル番号です。

SIGINT

対話的なアテンションシグナルの受け取りを示すシグナル番号です。

SIGSEGV

記憶域への不正なアクセスを示すシグナル番号です。

SIGTERM

プログラムへ送信された終了要求を示すシグナル番号です。

sig_atomic_t

非同期割込みの存在下でも、1つの不可分な実体としてアクセス(代入や参照)できるオブジェクトの整数型です。
シグナルを受けたときの割込検出フラグなどに使用されます。

関数

void (*signal(int sig, void (func)(int)))(int)

sigで指定されたシグナル番号に応じて、funcで指定された処理を実行します。
シグナル番号は以下の6つです。

  • SIGABRT(異常終了)※例えば、abort関数が発生させる。
  • SIGFPE(誤った算術演算)※例えば、0除算やオーバフローを発生する演算。
  • SIGILL(不正な関数イメージの検出)※例えば、不正命令。
  • SIGINT(対話的なアテンションシグナルの受け取り)
  • SIGSEGV(記憶域への不正なアクセス)
  • SIGTERM(プログラムへ送信された終了要求)

また、上記以外でも、追加のシグナルが処理系によって定義される場合があります。
signal関数は、funcにSIG_DELが指定されると、そのシグナルに対するデフォルトの操作を行います。
funcにSIG_IGNが指定されると、そのシグナルを無視します。
funcにそれ以外の値が指定された場合は、そのシグナルが発生した時に、funcを関数として呼び出します。
指定された操作が処理できる場合、指定されたシグナルsigに対して最も新しく成功したsignal関数呼出しのfuncの値が返されます。
そうでない場合は、SIG_ERRの値(正の値をerrnoに格納する)が返されます。

int raise(int sig)

シグナルsigを送信します。
シグナル処理ルーチンを呼び出した場合は、その実行が終了するまでraise関数から制御が戻ることはありません。
成功したときは0、失敗したときは0以外の値が返されます。

コメント