名 前
sigvec, sigblock, sigsetmask, siggetmask, sigmask − BSD 版 シ グ ナ ル API
書 式
#include <signal.h>
int sigvec(int sig, const struct sigvec *vec, struct sigvec *ovec);
int sigmask(int signum);
int sigblock(int mask);
int sigsetmask(int mask);
int siggetmask(void);
glibc 向 け の 機 能 検 査 マ ク ロ の 要 件 (feature_test_macros(7) 参 照 ): 上 記 の 全 て の 関 数 : _BSD_SOURCE
説 明
こ れ ら の 関 数 は 、 昔 な が ら の BSD 版 シ グ ナ ル API を 使 用 し て い る プ ロ グ ラ ム に 対 し て 互 換 性 の あ る イ ン タ ー フ ェ ー ス を glibc で 提 供 す る も の で あ る 。 こ の API は 過 去 の も の で あ り 、 新 し い ア プ リ ケ ー シ ョ ン で は POSIX シ グ ナ ル API (sigaction(2), sigprocmask(2) な ど ) を 使 用 す べ き で あ る 。 関 数 sigvec() は 、 (POSIX の sigaction(2) と 同 様 に ) シ グ ナ ル sig の 動 作 の 設 定 ・ 取 得 を 行 う 。 vec は 、 NULL 以 外 の 場 合 、 sig の 新 し い 動 作 を 定 義 し た sigvec 構 造 体 へ の ポ イ ン タ ー で あ る 。 ovec は 、 NULL 以 外 の 場 合 、 sig の 変 更 前 の 動 作 を 返 す た め に 使 用 さ れ る sigvec 構 造 体 へ の ポ イ ン タ ー で あ る 。 sig の 動 作 を 変 更 せ ず に 現 在 の 動 作 を 取 得 す る た め に は 、 vec に NULL を 指 定 し 、 ovec に NULL で な い ポ イ ン タ ー を 指 定 す れ ば よ い 。 シ グ ナ ル SIGKILL と SIGSTOP に 対 す る 動 作 は 変 更 で き な い 。
sigvec 構 造 体 は 以 下 の 通 り で あ る :
struct sigvec {
void (*sv_handler)(int); /* Signal disposition */
int sv_mask; /* Signals to be blocked in handler */
int sv_flags; /* Flags */ };
sv_handler フ ィ ー ル ド は シ グ ナ ル の 動 作 を 指 定 す る も の で 、 シ グ ナ ル ハ ン ド ラ ー 関 数 の ア ド レ ス か 、 SIG_DFL と SIG_IGN の い ず れ か を 指 定 で き る 。 SIG_DFL は シ グ ナ ル に 適 用 さ れ る デ フ ォ ル ト の 動 作 を 意 味 し 、 SIG_IGN は シ グ ナ ル を 無 視 す る こ と を 意 味 す る 。
sv_handler に シ グ ナ ル ハ ン ド ラ ー の ア ド レ ス を 指 定 し た 場 合 、 sv_mask は ハ ン ド ラ ー が 実 行 中 に ブ ロ ッ ク さ れ る べ き シ グ ナ ル の マ ス ク を 指 定 す る 。 ま た 、 ハ ン ド ラ ー を 起 動 し た シ グ ナ ル 自 身 は ブ ロ ッ ク さ れ る 。 SIGKILL か SIGSTOP を ブ ロ ッ ク し よ う と し た 場 合 に は 、 黙 っ て 無 視 さ れ る 。
sv_handler
に シ グ ナ ル ハ
ン ド ラ ー の ア
ド レ ス を 指 定
し た 場 合 、 sv_flags
フ ィ ー ル ド は
ハ ン ド ラ ー が
呼 ば れ た 際 の
挙 動 を 制 御 す
る フ ラ グ を 指
定 す る 。 こ の
フ ィ ー ル ド に
は 、 0 か 、 以 下
の フ ラ グ を 1個
以 上 指 定 で き
る :
SV_INTERRUPT シ グ ナ ル
ハ ン ド ラ ー が
停 止 中 の シ ス
テ ム コ ー ル を
中 断 し た 場 合
、 ハ ン ド ラ ー
か ら 復 帰 し て
も 、 シ ス テ ム
コ ー ル は 再 開
さ れ ず 、 エ ラ
ー EINTR で 失 敗 す
る 。 こ の フ ラ
グ を 指 定 し な
か っ た 場 合 、
シ ス テ ム コ ー
ル は デ フ ォ ル
ト で 再 開 さ れ
る 。
SV_RESETHAND シ グ ナ ル
ハ ン ド ラ ー を
呼 び 出 す 前 に
シ グ ナ ル の 動
作 を デ フ ォ ル
ト に リ セ ッ ト
す る 。 こ の フ
ラ グ を 指 定 し
な か っ た 場 合
、 も う 一 度 sigvec()
を 呼 び 出 し て
明 示 的 に 削 除
さ れ る か 、 プ
ロ セ ス が execve(2)
を 実 行 す る ま
で 、 ハ ン ド ラ
ー は 設 定 さ れ
た ま ま と な る
。
SV_ONSTACK 代 替 シ グ ナ
ル ス タ ッ ク 上
で シ グ ナ ル ハ
ン ド ラ ー を 実
行 す る (歴 史 的
に 、 BSD で は 代 替
シ グ ナ ル ス タ
ッ ク は 廃 止 さ
れ た 関 数 sigstack()
を 使 っ て 設 定
す る 。 POSIX で は 、
代 わ り に sigaltstack(2)
を 使 用 す る )。
マ ク ロ sigmask() は
signum に 対 す る 「
シ グ ナ ル マ ス
ク 」 を 構 成 し
て 返 す 。 例 え
ば 、 以 下 の よ
う な コ ー ド を
使 う と 、 sigvec() に
渡 す vec.sv_mask を 初
期 化 で き る 。
vec.sv_mask =
sigmask(SIGQUIT) | sigmask(SIGABRT);
/* Block SIGQUIT and SIGABRT during
handler execution */
sigblock() 関 数 は 、 mask に あ る シ グ ナ ル を プ ロ セ ス の シ グ ナ ル マ ス ク に 追 加 し (POSIX の sigprocmask(SIG_BLOCK) と 同 様 )、 変 更 前 の プ ロ セ ス の シ グ ナ ル マ ス ク を 返 す 。 SIGKILL や SIGSTOP を ブ ロ ッ ク し よ う と し た 場 合 に は 、 黙 っ て 無 視 さ れ る 。
sigsetmask() 関 数 は プ ロ セ ス の シ グ ナ ル マ ス ク を mask で 指 定 さ れ た 値 に 設 定 し (POSIX の sigprocmask(SIG_SETMASK) と 同 様 )、 変 更 前 の プ ロ セ ス の シ グ ナ ル マ ス ク を 返 す 。
siggetmask() 関 数 は プ ロ セ ス の 現 在 の シ グ ナ ル マ ス ク を 返 す 。 こ の 関 数 は sigblock(0) と 等 価 で あ る 。
返 り 値
sigvec() 関 数 は 成 功 す る と 0 を 返 す 。 エ ラ ー の 場 合 、 −1 を 返 し 、 errno に エ ラ ー を 示 す 値 を セ ッ ト す る 。
sigblock() と sigsetmask() は 変 更 前 の シ グ ナ ル マ ス ク を 返 す 。
sigmask() マ ク ロ は signum の シ グ ナ ル マ ス ク を 返 す 。
エ ラ ー
sigaction(2) と sigprocmask(2) の 「 エ ラ ー 」 の 節 を 参 照 。
属 性
マ ル チ ス レ ッ デ ィ ン グ (pthreads(7) 参 照 ) 関 数 sigvec(), sigblock(), sigsetmask(), siggetmask() は ス レ ッ ド セ ー フ で あ る 。
sigmask() マ ク ロ は ス レ ッ ド セ ー フ で あ る 。
バ ー ジ ョ ン
バ ー ジ ョ ン 2.21 以 降 で は 、 GNU C ラ イ ブ ラ リ は も は や sigvec() 関 数 を ABI の 一 部 と し て 公 開 し な く な っ た 。 (後 方 互 換 性 を 保 証 す る た め に 、 glibc の シ ン ボ ル の バ ー ジ ョ ン 付 け 機 構 に よ り 、 古 い バ ー ジ ョ ン の ラ イ ブ ラ リ と リ ン ク さ れ た バ イ ナ リ に 対 し て は こ の イ ン タ ー フ ェ ー ス が 引 き 続 き 公 開 さ れ て い る 。 )
準 拠
こ れ ら の 関 数 の う ち siggetmask() 以 外 の 全 て は 4.3BSD に あ っ た 。 siggetmask() の 出 自 は は っ き り し な い 。 こ れ ら の 関 数 は 廃 止 予 定 で あ り 、 新 し い プ ロ グ ラ ム で は 使 用 し な い こ と 。
注 意
4.3BSD で は 、 信 頼 性 の あ る シ グ ナ ル 処 理 機 構 を 提 供 す る (vec.sv_mask を 0 で sigvec() を 呼 び 出 し た と き と 同 様 )。 System V が 提 供 す る 処 理 機 構 は 信 頼 性 の な い も の で あ る 。 POSIX.1−2001 で は 、 signal() の こ の 点 は 規 定 し な い ま ま と な っ て い る 。 さ ら な る 詳 細 に つ い て は signal(2) を 参 照 。
BSD と System V の ど ち ら の シ ス テ ム で も シ グ ナ ル を 待 つ た め に 、 sigpause(3) と い う 名 前 の 関 数 が 提 供 さ れ て い る が 、 こ の 関 数 の 引 き 数 は 両 方 の シ ス テ ム で 異 な る 。 詳 細 は sigpause(3) を 参 照 。
関 連 項 目
kill(2), pause(2), sigaction(2), signal(2), sigprocmask(2), raise(3), sigpause(3), sigset(3), signal(7)
こ の 文 書 に つ い て
こ の man ペ ー ジ は Linux man−pages プ ロ ジ ェ ク ト の リ リ ー ス 3.79 の 一 部 で あ る 。 プ ロ ジ ェ ク ト の 説 明 と バ グ 報 告 に 関 す る 情 報 は http://www.kernel.org/doc/man−pages/ に 書 か れ て い る 。