sysv_signal - System V
方式のシグナル処理
#define _GNU_SOURCE /*
feature_test_macros(7) 参照 */
#include <signal.h>
typedef void (*sighandler_t)(int);
sighandler_t sysv_signal(int signum, sighandler_t
handler );
sysv_signal() 関数は
signal(2)
と同じ引数をとり、同じ処理を実行する。
しかしながら、
sysv_signal()
は System V
の信頼性に欠けるシグナル処理方式を提供している。
信頼性に欠けるシグナル処理方式は以下の特徴を持つ。
a)
ハンドラーが起動されると、シグナルの処理方法
(disposition) が
デフォルトにリセットされる、
b)
シグナルハンドラーの実行中は、それ以降に発生した同じシグナルの配送が
ブロックされない、 c)
ハンドラーが停止中の
(blocking している)
システムコールを中断した場合、
自動的に再開されないシステムコールがある。
sysv_signal()
関数はシグナルハンドラーの直前の値を返す。
エラーの場合、
SIG_ERR
を返す。
signal(2) と同じ。
この節で使用されている用語の説明については、
attributes(7) を参照。
インターフェース |
属性 |
値 |
sysv_signal() |
Thread safety |
MT-Safe |
この関数は非標準である。
sysv_signal()
の使用は避けるべきである。代わりに
sigaction(2) を使うこと。
以前の Linux
システムでは、
sysv_signal()
と
signal(2)
は等価であった。しかし、新しめのシステムでは、
signal(2)
は信頼性のあるシグナル処理方式を提供している。
詳細は
signal(2) を参照。
sighandler_t
を使っているのは GNU
による拡張である。
この型は機能検査マクロ
_GNU_SOURCE
を定義した場合にのみ定義される。
sigaction(2),
signal(2),
bsd_signal(3),
signal(7)
この man ページは Linux
man-pages
プロジェクトのリリース
5.10
の一部である。プロジェクトの説明とバグ報告に関する情報は
https://www.kernel.org/doc/man-pages/
に書かれている。