Manpages

名 前

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 で な い ポ イ ン タ ー を 指 定 す れ ば よ い 。 シ グ ナ ル SIGKILLSIGSTOP に 対 す る 動 作 は 変 更 で き な い 。

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_DFLSIG_IGN の い ず れ か を 指 定 で き る 。 SIG_DFL は シ グ ナ ル に 適 用 さ れ る デ フ ォ ル ト の 動 作 を 意 味 し 、 SIG_IGN は シ グ ナ ル を 無 視 す る こ と を 意 味 す る 。

sv_handler に シ グ ナ ル ハ ン ド ラ ー の ア ド レ ス を 指 定 し た 場 合 、 sv_mask は ハ ン ド ラ ー が 実 行 中 に ブ ロ ッ ク さ れ る べ き シ グ ナ ル の マ ス ク を 指 定 す る 。 ま た 、 ハ ン ド ラ ー を 起 動 し た シ グ ナ ル 自 身 は ブ ロ ッ ク さ れ る 。 SIGKILLSIGSTOP を ブ ロ ッ ク し よ う と し た 場 合 に は 、 黙 っ て 無 視 さ れ る 。

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) と 同 様 )、 変 更 前 の プ ロ セ ス の シ グ ナ ル マ ス ク を 返 す 。 SIGKILLSIGSTOP を ブ ロ ッ ク し よ う と し た 場 合 に は 、 黙 っ て 無 視 さ れ る 。

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/ に 書 か れ て い る 。