名 前
sigevent − 非 同 期 ル ー チ ン か ら の 通 知 用 の 構 造 体
書 式
union sigval {
/* Data passed with notification */
int sival_int; /* Integer value */
void *sival_ptr; /* Pointer value */ };
struct sigevent
{
int sigev_notify; /* Notification method */
int sigev_signo; /* Notification signal */
union sigval sigev_value; /* Data passed with
notification */
void (*sigev_notify_function) (union sigval);
/* Function used for thread
notification (SIGEV_THREAD) */
void *sigev_notify_attributes;
/* Attributes for notification thread
(SIGEV_THREAD) */
pid_t sigev_notify_thread_id;
/* ID of thread to signal (SIGEV_THREAD_ID) */ };
説 明
sigevent 構 造 体 は 、 イ ベ ン ト に 関 す る 情 報 を プ ロ セ ス に 通 知 す る た め に 様 々 な API で 使 用 さ れ る (イ ベ ン ト の 例 と し て は 、 非 同 期 処 理 要 求 の 完 了 、 タ イ マ ー の 満 了 、 メ ッ セ ー ジ の 到 着 な ど )。 「 書 式 」 に 記 載 さ れ て い る 定 義 は お お よ そ の も の で あ る 。 sigevent 構 造 体 の い く つ か の フ ィ ー ル ド は 、 共 用 体 の 一 部 と し て 定 義 さ れ て い る も の も あ る 。 プ ロ グ ラ ム は 、 sigev_notify で 指 定 さ れ た 値 に 応 じ た フ ィ ー ル ド だ け を 利 用 す べ き で あ る 。
sigev_notify
フ ィ ー ル ド は
、 通 知 を ど の
よ う に 処 理 す
べ き か を 指 定
す る 。 こ の フ
ィ ー ル ド は 、
以 下 の い ず れ
か の 値 で あ る
。
SIGEV_NONE 「 空 (null)」 の
通 知 。 イ ベ ン
ト が 発 生 時 に
は 何 も し な い
こ と 。
SIGEV_SIGNAL
sigev_signo で 指 定 さ れ た シ グ ナ ル を 送 信 す る こ と で 、 プ ロ セ ス へ の 通 知 を 行 う 。
sigaction(2) の SA_SIGINFO フ ラ グ を 使 っ た 登 録 さ れ た シ グ ナ ル ハ ン ド ラ ー に よ り シ グ ナ ル が 捕 捉 さ れ る と 、 シ グ ナ ル ハ ン ド ラ ー の 2 番 目 の 引 き 数 と し て 渡 さ れ た siginfo_t 構 造 体 の 以 下 の フ ィ ー ル ド が 設 定 さ れ る 。
si_code こ の フ ィ ー ル ド に は 通 知 を 配 送 し た |
API に 応 じ た 決 ま る 値 |
が 設 定 さ れ る 。
si_signo こ の フ ィ ー ル ド に は シ グ ナ ル 番 号 |
(す な わ ち sigev_signo |
と 同 じ 値 ) が 設 定 さ れ る 。
si_value こ の フ ィ ー ル ド に は |
sigev_value で 指 定 さ れ た 値 が 設 定 さ |
れ る 。
API に よ っ て は siginfo_t 構 造 体 の 他 の フ ィ ー ル ド が 設 定 さ れ る 場 合 も あ る 。 シ グ ナ ル を 受 け 取 っ た と き に は sigwaitinfo(2) で も 同 じ 情 報 が 得 ら れ る 。
SIGEV_THREAD 「
あ た か も 」 新
し い ス レ ッ ド
セ ー フ の 開 始
関 数 で あ る か
の よ う に
sigev_notify_function を 起 動
す る こ と で 、
プ ロ セ ス へ の
通 知 を 行 う (実
装 の 可 能 性 と
し て は 、 タ イ
マ ー 通 知 の 度
に 新 し い ス レ
ッ ド セ ー フ が
作 成 さ れ る 場
合 も 、 一 つ の
ス レ ッ ド を 作
成 し て す べ て
の 通 知 を 受 信
す る 場 合 も あ
る )。 こ の 関 数
は sigev_value を 唯 一
の 引 き 数 と し
て 起 動 さ れ る
。 sigev_notify_attributes は 、
NULL 以 外 の 場 合 は
、 新 し い ス レ
ッ ド セ ー フ の
属 性 を 定 義 す
る pthread_attr_t 構 造 体
を 指 し て い な
け れ ば な ら な
い (pthread_attr_init(3) 参 照
)。
SIGEV_THREAD_ID (Linux 固 有 ) 現
在 の と こ ろ POSIX で
の み 使 用 さ れ
て い る 。 timer_create(2)
参 照 。
準 拠
POSIX.1−2001.
関 連 項 目
timer_create(2), aio_fsync(3), aio_read(3), aio_write(3), getaddrinfo_a(3), lio_listio(3), mq_notify(3), aio(7), pthreads(7)
こ の 文 書 に つ い て
こ の man ペ ー ジ は Linux man−pages プ ロ ジ ェ ク ト の リ リ ー ス 3.79 の 一 部 で あ る 。 プ ロ ジ ェ ク ト の 説 明 と バ グ 報 告 に 関 す る 情 報 は http://www.kernel.org/doc/man−pages/ に 書 か れ て い る 。