C言語/標準ライブラリ/signal.h

出典: フリー教科書『ウィキブックス(Wikibooks)』

ヘッダー<signal.h> では、さまざまなシグナル(プログラムの実行中に報告される条件)を処理するために、型と2つの関数を宣言し、いくつかのマクロを定義しています[1]

[編集]

sig_atomic_t
非同期の割り込みがあっても、アトミックにアクセスできるオブジェクトの(おそらくvolatile 修飾された)整数型です。

マクロ[編集]

SIG_DFL
SIG_ERR
SIG_IGN

シグナル関数の第2引数とその戻り値に対応した型を持ち、かつ宣言可能な関数のアドレスと比較して不等な値を持つ定数式に展開されるものと、 int型の正の整数の定数式に展開され、それぞれ指定された条件に対応するシグナル番号である明確な値を持つ以下のものがあります。

シグナル番号と意味[編集]

SIGABRT
アボート機能による異常終了
SIGFPE
ゼロ除算やオーバーフローのような誤った算術演算
SIGILL
無効な命令など、無効な関数イメージの検出
SIGINT
インタラクティブ・アテンション・シグナルの受信
SIGSEGV
ストレージへの不正なアクセス
SIGTERM
プログラムへの終了要求

実装では、明示的に raise 関数を呼び出した場合を除き、これらのシグナルを生成する必要はありません。

SIGと大文字、またはSIG_と大文字で始まるマクロ定義を持つ、追加のシグナルと宣言不可能な関数へのポインタも、実装によって指定することができます。

シグナルの完全なセット、そのセマンティクス、およびデフォルトの処理は、実装によって定義されます。すべてのシグナル番号は正の値でなければなりません。

関数[編集]

シグナル処理の指定。

signal 関数[編集]

形式
#include <signal.h>
void (*signal(int sig, void (*func)(int)))(int);
説明
signal 関数は、シグナル番号 sig の受信をその後どのように処理するか、funcの値によって3つの方法のうち1つを選択します。
SIG_DFL
そのシグナルに対するデフォルトの処理が行われます。
SIG_IGN
そのシグナルは無視される。
それ以外の場合
funcはそのシグナルが発生したときに呼び出される関数を指します。
シグナルが原因でこのような関数が呼び出された場合や(再帰的に)その呼び出しによってさらに呼び出される関数(標準ライブラリの関数を除く)をシグナルハンドラと呼びます。

raise 関数[編集]

形式
#include <signal.h>
int raise(int sig);
説明
raise関数は、シグナルsigに対して前述の動作を行います。
シグナル・ハンドラーが呼ばれた場合、シグナル・ハンドラーが終了するまで、 raise関数は戻りません。
戻り値
raise関数は、成功した場合はゼロを、失敗した場合は非ゼロを返します。

脚註[編集]

  1. ^ N2596 working draft — December 11, 2020 ISO/IEC 9899:202x (E). ISO/IEC JTC1/SC22/WG14. p. 242, §7.14 Signal handling <signal.h>. http://www.open-std.org/jtc1/sc22/wg14/www/docs/n2596.pdf. 

参考文献[編集]