1 .\" Copyright (C) 2008 Michael Kerrisk <mtk.manpages@gmail.com>
2 .\" starting from a version by Davide Libenzi <davidel@xmailserver.org>
4 .\" This program is free software; you can redistribute it and/or modify
5 .\" it under the terms of the GNU General Public License as published by
6 .\" the Free Software Foundation; either version 2 of the License, or
7 .\" (at your option) any later version.
9 .\" This program is distributed in the hope that it will be useful,
10 .\" but WITHOUT ANY WARRANTY; without even the implied warranty of
11 .\" MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 .\" GNU General Public License for more details.
14 .\" You should have received a copy of the GNU General Public License
15 .\" along with this program; if not, write to the Free Software
16 .\" Foundation, Inc., 59 Temple Place, Suite 330, Boston,
19 .\" Japanese Version Copyright (c) 2008 Akihiro MOTOKI
20 .\" all rights reserved.
21 .\" Translated 2008-04-06, Akihiro MOTOKI <amotoki@dd.iij4u.or.jp>, LDP v2.79
22 .\" Updated 2008-11-10, Akihiro MOTOKI <amotoki@dd.iij4u.or.jp>, LDP v3.13
23 .\" Updated 2009-02-23, Akihiro MOTOKI <amotoki@dd.iij4u.or.jp>, LDP v3.18
25 .TH SIGNALFD 2 2009-01-13 Linux "Linux Programmer's Manual"
27 signalfd \- ¥·¥°¥Ê¥ë¼õ¤±ÉÕ¤±ÍѤΥե¡¥¤¥ë¥Ç¥£¥¹¥¯¥ê¥×¥¿¤òÀ¸À®¤¹¤ë
29 .B #include <sys/signalfd.h>
31 .BI "int signalfd(int " fd ", const sigset_t *" mask ", int " flags );
34 ¤Ï¡¢¸Æ¤Ó½Ð¤·¸µ°¸¤Æ¤Î¥·¥°¥Ê¥ë¤ò¼õ¤±ÉÕ¤±¤ë¤¿¤á¤Ë»ÈÍѤµ¤ì¤ë¥Õ¥¡¥¤¥ë
35 ¥Ç¥£¥¹¥¯¥ê¥×¥¿¤òÀ¸À®¤¹¤ë¡£
36 ¤³¤ÎÊýË¡¤Ï¥·¥°¥Ê¥ë¥Ï¥ó¥É¥é¤ä
38 ¤òÍѤ¤¤ëÊýË¡¤ÎÂå¤ï¤ê¤È¤Ê¤ë¤â¤Î¤Ç¤¢¤ê¡¢¤³¤Î¥Õ¥¡¥¤¥ë¥Ç¥£¥¹¥¯¥ê¥×¥¿¤ò
42 ¤Ç´Æ»ë¤Ç¤¤ë¤È¤¤¤¦ÍøÅÀ¤¬¤¢¤ë¡£
45 °ú¤¿ô¤Ë¤Ï¡¢¸Æ¤Ó½Ð¤·¸µ¤¬¤³¤Î¥Õ¥¡¥¤¥ë¥Ç¥£¥¹¥¯¥ê¥×¥¿·Ðͳ¤Ç¼õ¤±ÉÕ¤±¤¿¤¤
46 ¥·¥°¥Ê¥ë½¸¹ç¤ò»ØÄꤹ¤ë¡£¤³¤Î°ú¤¿ô¤Ç»ØÄꤹ¤ë¥·¥°¥Ê¥ë½¸¹ç¤ÎÆâÍƤϡ¢
48 ¤ÇÀâÌÀ¤µ¤ì¤Æ¤¤¤ë¥Þ¥¯¥í¤ò»È¤Ã¤Æ½é´ü²½¤¹¤ë¤³¤È¤¬¤Ç¤¤ë¡£
49 Ä̾¥Õ¥¡¥¤¥ë¥Ç¥£¥¹¥¯¥ê¥×¥¿·Ðͳ¤Ç¼õ¿®¤¹¤ë¥·¥°¥Ê¥ë½¸¹ç¤Ï¡¢
50 ¤½¤Î¥·¥°¥Ê¥ë¤¬¥Ç¥Õ¥©¥ë¥È¤ÎÇÛÁ÷ÊýË¡¤Ë´ð¤¤¤Æ½èÍý¤µ¤ì¤ë¤Î¤òËɤ°¤¿¤á¤Ë¡¢
52 ¤ò»È¤Ã¤Æ¥Ö¥í¥Ã¥¯¤·¤Æ¤ª¤¯¤Ù¤¤Ç¤¢¤ë¡£
57 ¤ò signalfd ¥Õ¥¡¥¤¥ë¥Ç¥£¥¹¥¯¥ê¥×¥¿·Ðͳ¤Ç¼õ¿®¤¹¤ë¤³¤È¤Ï¤Ç¤¤Ê¤¤¡£
60 ¤Ç»ØÄꤵ¤ì¤¿¾ì¹ç¤Ë¤ÏÌۤäÆ̵»ë¤µ¤ì¤ë¡£
65 ¤Ï¿·¤·¤¤¥Õ¥¡¥¤¥ë¥Ç¥£¥¹¥¯¥ê¥×¥¿¤òÀ¸À®¤·¡¢
67 ¤Ç»ØÄꤵ¤ì¤¿¥·¥°¥Ê¥ë½¸¹ç¤ò¤½¤Î¥Õ¥¡¥¤¥ë¥Ç¥£¥¹¥¯¥ê¥×¥¿¤Ë´ØÏ¢ÉÕ¤±¤ë¡£
69 °ú¤¿ô¤¬ \-1 °Ê³°¤Î¾ì¹ç¡¢
71 ¤Ë¤Ï͸ú¤Ê´û¸¤Î signalfd ¥Õ¥¡¥¤¥ë¥Ç¥£¥¹¥¯¥ê¥×¥¿¤ò»ØÄꤷ¤Ê¤±¤ì¤Ð¤Ê¤é¤º¡¢
72 ¤½¤Î¥Ç¥£¥¹¥¯¥ê¥×¥¿¤Ë´ØÏ¢ÉÕ¤±¤é¤ì¤Æ¤¤¤ë¥·¥°¥Ê¥ë½¸¹ç¤Ï
74 ¤ò»È¤Ã¤ÆÃÖ¤´¹¤¨¤é¤ì¤ë¡£
76 Linux 2.6.27 °Ê¹ß¤Ç¤Ï¡¢
77 °Ê²¼¤ÎÃͤΤ¤¤¯¤Ä¤«¤ò¥Ó¥Ã¥Èñ°Ì¤ÎÏÀÍýÏ (OR) ¤Ç»ØÄꤹ¤ë¤³¤È¤Ç¡¢
79 ¤Î¿¶Éñ¤¤¤òÊѹ¹¤¹¤ë¤³¤È¤¬¤Ç¤¤ë¡£
82 ¿·¤·¤¯À¸À®¤µ¤ì¤ë¥ª¡¼¥×¥ó¥Õ¥¡¥¤¥ëµ½Ò (open file description) ¤Î
84 ¥Õ¥¡¥¤¥ë¥¹¥Æ¡¼¥¿¥¹¥Õ¥é¥°¤ò¥»¥Ã¥È¤¹¤ë¡£
85 ¤³¤Î¥Õ¥é¥°¤ò»È¤¦¤³¤È¤Ç¡¢
89 ¤òÄɲäǸƤӽФ¹É¬Íפ¬¤Ê¤¯¤Ê¤ë¡£
92 ¿·¤·¤¤¥Õ¥¡¥¤¥ë¥Ç¥£¥¹¥¯¥ê¥×¥¿¤ËÂФ·¤Æ
96 ¤³¤Î¥Õ¥é¥°¤¬Ìò¤ËΩ¤ÄÍýͳ¤Ë¤Ä¤¤¤Æ¤Ï¡¢
100 ¥Õ¥é¥°¤ÎÀâÌÀ¤ò»²¾È¤Î¤³¤È¡£
102 ¥Ð¡¼¥¸¥ç¥ó 2.6.26 °ÊÁ°¤Î Linux ¤Ç¤Ï¡¢
104 °ú¤¿ô¤Ï̤»ÈÍѤǤ¢¤ê¡¢0 ¤ò»ØÄꤷ¤Ê¤±¤ì¤Ð¤Ê¤é¤Ê¤¤¡£
107 ¤¬ÊÖ¤¹¥Õ¥¡¥¤¥ë¥Ç¥£¥¹¥¯¥ê¥×¥¿¤Ï°Ê²¼¤ÎÁàºî¤ò¥µ¥Ý¡¼¥È¤·¤Æ¤¤¤ë¡£
111 ¤Ë»ØÄꤵ¤ì¤Æ¤¤¤ë¥·¥°¥Ê¥ë¤Î¤¦¤Á°ì¤Ä°Ê¾å¤¬¤½¤Î¥×¥í¥»¥¹¤ËÂФ·¤Æ
112 ½èÍýÂÔ¤Á (pending) ¤Ç¤¢¤ì¤Ð¡¢¤½¤ì¤é¤Î¥·¥°¥Ê¥ë¤Î¾ðÊó¤¬
114 ¤ËÅϤµ¤ì¤¿¥Ð¥Ã¥Õ¥¡¤ò»È¤Ã¤Æ¡¢
116 ¹½Â¤ÂΤ˳ÊǼ¤µ¤ì¤ÆÊÖ¤µ¤ì¤ë¡£
118 ¤Ï¡¢¥Ð¥Ã¥Õ¥¡¤Ë³ÊǼ²Äǽ¤ÊÈϰϤǤǤ¤ë¤À¤±Â¿¤¯¤Î½èÍýÂÔ¤Á¤Î¥·¥°¥Ê¥ë¤Ë
121 .I "sizeof(struct signalfd_siginfo)"
122 ¥Ð¥¤¥È¤ÎÂ礤µ¤¬¤Ê¤±¤ì¤Ð¤Ê¤é¤Ê¤¤¡£
124 ¤ÎÊÖ¤êÃͤÏÆɤ߽Фµ¤ì¤¿¥È¡¼¥¿¥ë¤Î¥Ð¥¤¥È¿ô¤Ç¤¢¤ë¡£
127 ¤¬¹Ô¤ï¤ì¤¿·ë²Ì¡¢¥·¥°¥Ê¥ë¤Ï¾ÃÈñ¤µ¤ì¡¢
128 ¤³¤ì¤é¤Î¥·¥°¥Ê¥ë¤Ï¤½¤Î¥×¥í¥»¥¹¤ËÂФ·¤Æ¤Ï½èÍýÂÔ¤Á¤Ç¤Ï¤Ê¤¯¤Ê¤ë
129 (¤Ä¤Þ¤ê¡¢¥·¥°¥Ê¥ë¥Ï¥ó¥É¥é¤ÇÊ᪤µ¤ì¤ë¤³¤È¤â¤Ê¤¯¡¢
131 ¤ò»È¤Ã¤Æ¼õ¤±¼è¤ë¤³¤È¤â¤Ç¤¤Ê¤¯¤Ê¤ë)¡£
134 ¤Ë»ØÄꤵ¤ì¤Æ¤¤¤ë¥·¥°¥Ê¥ë¤¬¤½¤Î¥×¥í¥»¥¹¤ËÂФ·¤Æ°ì¤Ä¤â½èÍýÂÔ¤Á¤Ç¤Ê¤±¤ì¤Ð¡¢
138 ¤Ç»ØÄꤵ¤ì¤¿¥·¥°¥Ê¥ë¤Î¤¦¤Á¤¤¤º¤ì¤«°ì¤Ä¤¬¤½¤Î¥×¥í¥»¥¹¤ËÂФ·¤ÆȯÀ¸¤¹¤ë¤Þ¤Ç
139 Ää»ß (block) ¤¹¤ë¡¢¤â¤·¤¯¤Ï¥Õ¥¡¥¤¥ë¥Ç¥£¥¹¥¯¥ê¥×¥¿¤¬ÈóÄä»ß (nonblocking)
140 ¤ËÀßÄꤵ¤ì¤Æ¤¤¤ë¾ì¹ç¤Ï¥¨¥é¡¼
144 .BR poll "(2), " select "(2) (¤ÈƱÍͤÎÁàºî)"
146 ¤Ë»ØÄꤵ¤ì¤¿¥·¥°¥Ê¥ë¤Î¤¦¤Á°ì¤Ä°Ê¾å¤¬¤½¤Î¥×¥í¥»¥¹¤ËÂФ·¤Æ½èÍýÂÔ¤Á¤Ç¤¢¤ì¤Ð¡¢
147 ¥Õ¥¡¥¤¥ë¥Ç¥£¥¹¥¯¥ê¥×¥¿¤ÏÆɤ߽Ф·²Äǽ¤È¤Ê¤ë
157 signalfd ¥Õ¥¡¥¤¥ë¥Ç¥£¥¹¥¯¥ê¥×¥¿¤Ï¡¢¤³¤ì°Ê³°¤Î¥Õ¥¡¥¤¥ë¥Ç¥£¥¹¥¯¥ê¥×¥¿
165 ¥Õ¥¡¥¤¥ë¥Ç¥£¥¹¥¯¥ê¥×¥¿¤¬¤½¤ì°Ê¹ß¤ÏɬÍפʤ¯¤Ê¤Ã¤¿ºÝ¤Ë¤Ï¡¢¥¯¥í¡¼¥º¤¹¤Ù¤¤Ç¤¢¤ë¡£
166 Ʊ¤¸ signalfd ¥ª¥Ö¥¸¥§¥¯¥È¤Ë´ØÏ¢ÉÕ¤±¤é¤ì¤¿¥Õ¥¡¥¤¥ë¥Ç¥£¥¹¥¯¥ê¥×¥¿¤¬Á´¤Æ
167 ¥¯¥í¡¼¥º¤µ¤ì¤ë¤È¡¢¤½¤Î¥ª¥Ö¥¸¥§¥¯¥ÈÍѤλñ¸»¤¬¥«¡¼¥Í¥ë¤Ë¤è¤ê²òÊü¤µ¤ì¤ë¡£
168 .SS signalfd_siginfo ¹½Â¤ÂÎ
169 signalfd ¥Õ¥¡¥¤¥ë¥Ç¥£¥¹¥¯¥ê¥×¥¿¤«¤é¤Î
173 ¹½Â¤ÂΤΥե©¡¼¥Þ¥Ã¥È¤Ï°Ê²¼¤ÎÄ̤ê¤Ç¤¢¤ë¡£
177 struct signalfd_siginfo {
178 struct signalfd_siginfo {
179 uint32_t ssi_signo; /* ¥·¥°¥Ê¥ëÈÖ¹æ */
180 int32_t ssi_errno; /* ¥¨¥é¡¼ÈÖ¹æ (̤»ÈÍÑ) */
181 int32_t ssi_code; /* ¥·¥°¥Ê¥ë¥³¡¼¥É */
182 uint32_t ssi_pid; /* Á÷¿®¸µ¤Î PID */
183 uint32_t ssi_uid; /* Á÷¿®¸µ¤Î¼Â UID */
184 int32_t ssi_fd; /* ¥Õ¥¡¥¤¥ë¥Ç¥£¥¹¥¯¥ê¥×¥¿ (SIGIO) */
185 uint32_t ssi_tid; /* ¥«¡¼¥Í¥ë¥¿¥¤¥Þ ID (POSIX ¥¿¥¤¥Þ)
186 uint32_t ssi_band; /* Band ¥¤¥Ù¥ó¥È (SIGIO) */
187 uint32_t ssi_overrun; /* POSIX ¥¿¥¤¥Þ¤Î¥ª¡¼¥Ð¡¼¥é¥ó²ó¿ô */
188 uint32_t ssi_trapno; /* ¥·¥°¥Ê¥ë¤Î¸¶°ø¤È¤Ê¤Ã¤¿¥È¥é¥Ã¥×ÈÖ¹æ */
189 .\" ¤Û¤È¤ó¤É¤Î¥¢¡¼¥¥Æ¥¯¥Á¥ã¤Ç ssi_trapno ¤Ï̤»ÈÍÑ
190 int32_t ssi_status; /* ½ªÎ»¥¹¥Æ¡¼¥¿¥¹¤«¥·¥°¥Ê¥ë (SIGCHLD) */
191 int32_t ssi_int; /* sigqueue(3) ¤«¤éÁ÷¤é¤ì¤¿À°¿ô */
192 uint64_t ssi_ptr; /* sigqueue(3) ¤«¤éÁ÷¤é¤ì¤¿¥Ý¥¤¥ó¥¿ */
193 uint64_t ssi_utime; /* ¾ÃÈñ¤·¤¿¥æ¡¼¥¶ CPU »þ´Ö (SIGCHLD) */
194 uint64_t ssi_stime; /* ¾ÃÈñ¤·¤¿¥·¥¹¥Æ¥à CPU »þ´Ö (SIGCHLD) */
195 uint64_t ssi_addr; /* ¥·¥°¥Ê¥ë¤òÀ¸À®¤·¤¿¥¢¥É¥ì¥¹
196 (¥Ï¡¼¥É¥¦¥§¥¢¤¬À¸À®¤·¤¿¥·¥°¥Ê¥ë¤Î¾ì¹ç) */
197 uint8_t pad[\fIX\fP]; /* pad ¤ÎÂ礤µ¤Ï 128 ¥Ð¥¤¥È
198 (¾Íè¤Î¥Õ¥£¡¼¥ë¥ÉÄɲÃÍѤξì½ê¤Î³ÎÊÝ) */
204 ¹½Â¤ÂΤγƥե£¡¼¥ë¥É¤Ï¡¢
206 ¹½Â¤ÂΤÎƱ¤¸¤è¤¦¤Ê̾Á°¤Î¥Õ¥£¡¼¥ë¥É¤ÈƱÍͤǤ¢¤ë¡£
213 ¹½Â¤ÂΤÎÁ´¤Æ¤Î¥Õ¥£¡¼¥ë¥É¤¬¤¢¤ë¥·¥°¥Ê¥ë¤ËÂФ·¤Æ͸ú¤Ê¤ï¤±¤Ç¤Ï¤Ê¤¤¡£
214 ¤É¤Î¥Õ¥£¡¼¥ë¥É¤¬Í¸ú¤«¤Ï¡¢
216 ¥Õ¥£¡¼¥ë¥É¤ÇÊÖ¤µ¤ì¤ëÃͤ«¤éȽÄꤹ¤ë¤³¤È¤¬¤Ç¤¤ë¡£
221 ¥Õ¥£¡¼¥ë¥É¤ÈƱÍͤǤ¢¤ë¡£¾ÜºÙ¤Ï
226 ¤¬¹Ô¤ï¤ì¤ë¤È¡¢»Ò¥×¥í¥»¥¹¤Ï signalfd ¥Õ¥¡¥¤¥ë¥Ç¥£¥¹¥¯¥ê¥×¥¿¤Î¥³¥Ô¡¼¤ò
228 »Ò¥×¥í¥»¥¹¤Ç¤³¤Î¥Õ¥¡¥¤¥ë¥Ç¥£¥¹¥¯¥ê¥×¥¿¤«¤é
230 ¤ò¹Ô¤¦¤È¡¢»Ò¥×¥í¥»¥¹¤ËÂФ¹¤ë¥¥å¡¼¤ËÆþ¤Ã¤Æ¤¤¤ë¥·¥°¥Ê¥ë¤Ë´Ø¤¹¤ë
232 .SS execve(2) ¤Ç¤Î°·¤¤
233 ¾¤Î¥Õ¥¡¥¤¥ë¥Ç¥£¥¹¥¯¥ê¥×¥¿¤ÈÁ´¤¯Æ±Íͤˡ¢
234 signalfd ¥Õ¥¡¥¤¥ë¥Ç¥£¥¹¥¯¥ê¥×¥¿¤â
236 ¤ÎÁ°¸å¤Ç¥ª¡¼¥×¥ó¤µ¤ì¤¿¤Þ¤Þ¤È¤Ê¤ë¡£Ã¢¤·¡¢¤½¤Î¥Õ¥¡¥¤¥ë¥Ç¥£¥¹¥¯¥ê¥×¥¿¤Ë
237 close-on-exec ¤Î¥Þ¡¼¥¯
239 »²¾È) ¤¬ÉÕ¤¤¤Æ¤¤¤ë¾ì¹ç¤Ï¥¯¥í¡¼¥º¤µ¤ì¤ë¡£
241 ¤ÎÁ°¤ËÆɤ߽Ф·²Äǽ¤È¤Ê¤Ã¤Æ¤¤¤¿Á´¤Æ¤Î¥·¥°¥Ê¥ë¤Ï¿·¤·¤¯µ¯Æ°¤µ¤ì¤¿¥×¥í¥°¥é¥à
242 ¤Ç¤â°ú¤Â³¤Æɤ߽Ф·²Äǽ¤Ç¤¢¤ë
243 (¤³¤ì¤ÏÅÁÅýŪ¤Ê¥·¥°¥Ê¥ë¤Î°·¤¤¤ÈƱ¤¸¤Ç¤¢¤ê¡¢
244 ½èÍýÂÔ¤Á¤Î¥Ö¥í¥Ã¥¯¤µ¤ì¤¿¥·¥°¥Ê¥ë¤Ï
246 ¤ÎÁ°¸å¤Ç½èÍýÂÔ¤Á¤Î¤Þ¤Þ¤È¤Ê¤ë)¡£
248 ¥Þ¥ë¥Á¥¹¥ì¥Ã¥É¥×¥í¥°¥é¥à¤Ë¤ª¤±¤ë signalfd ¥Õ¥¡¥¤¥ë¥Ç¥£¥¹¥¯¥ê¥×¥¿¤Î°·¤¤¤Ï
249 ¥·¥°¥Ê¥ë¤Îɸ½àŪ¤Ê°·¤¤¤ÈÁ´¤¯Æ±¤¸¤Ç¤¢¤ë¡£
250 ¸À¤¤´¹¤¨¤ë¤È¡¢¤¢¤ë¥¹¥ì¥Ã¥É¤¬ signalfd ¥Õ¥¡¥¤¥ë¥Ç¥£¥¹¥¯¥ê¥×¥¿¤«¤é
251 Æɤ߽Ф·¤ò¹Ô¤¦¤È¡¢¤½¤Î¥¹¥ì¥Ã¥É¼«¿È°¸¤Æ¤Î¥·¥°¥Ê¥ë¤È¥×¥í¥»¥¹ (¤¹¤Ê¤ï¤Á
252 ¥¹¥ì¥Ã¥É¥°¥ë¡¼¥×Á´ÂÎ) °¸¤Æ¤Î¥·¥°¥Ê¥ë¤¬Æɤ߽Фµ¤ì¤ë¡£
253 (¥¹¥ì¥Ã¥É¤ÏƱ¤¸¥×¥í¥»¥¹¤Î¾¤Î¥¹¥ì¥Ã¥É°¸¤Æ¤Î¥·¥°¥Ê¥ë¤òÆɤ߽Ф¹¤³¤È¤Ï¤Ç¤¤Ê¤¤¡£)
257 ¤Ï signalfd ¥Õ¥¡¥¤¥ë¥Ç¥£¥¹¥¯¥ê¥×¥¿¤òÊÖ¤¹¡£
258 ÊÖ¤µ¤ì¤ë¥Õ¥¡¥¤¥ë¥Ç¥£¥¹¥¯¥ê¥×¥¿¤Ï¡¢
260 ¤¬ \-1 ¤Î¾ì¹ç¤Ï¿·µ¬¤Î¥Õ¥¡¥¤¥ë¥Ç¥£¥¹¥¯¥ê¥×¥¿¤Ç¤¢¤ê¡¢
262 ¤¬Í¸ú¤Ê signalfd ¥Õ¥¡¥¤¥ë¥Ç¥£¥¹¥¯¥ê¥×¥¿¤À¤Ã¤¿¾ì¹ç¤Ï
265 ¥¨¥é¡¼¤Î¾ì¹ç¡¢\-1 ¤òÊÖ¤·¡¢
267 ¤Ë¥¨¥é¡¼¤ò¼¨¤¹ÃͤòÀßÄꤹ¤ë¡£
271 ¥Õ¥¡¥¤¥ë¥Ç¥£¥¹¥¯¥ê¥×¥¿
273 ¤¬Í¸ú¤Ê¥Õ¥¡¥¤¥ë¥Ç¥£¥¹¥¯¥ê¥×¥¿¤Ç¤Ê¤¤¡£
277 ¤¬Í¸ú¤Ê signalfd ¥Õ¥¡¥¤¥ë¥Ç¥£¥¹¥¯¥ê¥×¥¿¤Ç¤Ï¤Ê¤¤¡£
280 .\" argument is not equal to
281 .\" .IR sizeof(sigset_t) ;
286 Linux 2.6.26 °ÊÁ°¤Ç¤Ï¡¢
291 ¥ª¡¼¥×¥óºÑ¤ß¤Î¥Õ¥¡¥¤¥ë¥Ç¥£¥¹¥¯¥ê¥×¥¿¤Î¿ô¤¬¥×¥í¥»¥¹¤¢¤¿¤ê¤Î¾å¸Â¤Ë
295 ¥ª¡¼¥×¥óºÑ¤ß¤Î¥Õ¥¡¥¤¥ëÁí¿ô¤¬¥·¥¹¥Æ¥àÁ´ÂΤξå¸Â¤Ë㤷¤Æ¤¤¤¿¡£
298 (¥«¡¼¥Í¥ëÆâ¤Î) ̵̾ inode ¥Ç¥Ð¥¤¥¹¤ò¥Þ¥¦¥ó¥È¤Ç¤¤Ê¤«¤Ã¤¿¡£
301 ¿·¤·¤¤ signalfd ¥Õ¥¡¥¤¥ë¥Ç¥£¥¹¥¯¥ê¥×¥¿¤òÀ¸À®¤¹¤ë¤Î¤Ë½½Ê¬¤Ê¥á¥â¥ê¤¬¤Ê¤«¤Ã¤¿¡£
304 ¤Ï¥«¡¼¥Í¥ë 2.6.22 °Ê¹ß¤Î Linux ¤ÇÍøÍѲÄǽ¤Ç¤¢¤ë¡£
305 Àµ¤·¤¯Æ°ºî¤¹¤ë glibc ¦¤Î¥µ¥Ý¡¼¥È¤Ï¥Ð¡¼¥¸¥ç¥ó 2.8 °Ê¹ß¤ÇÄ󶡤µ¤ì¤Æ¤¤¤ë¡£
306 .\" signalfd() is in glibc 2.7, but reportedly does not build
308 ¥·¥¹¥Æ¥à¥³¡¼¥ë (¡ÖÃí°Õ¡×»²¾È) ¤Ï
309 ¥«¡¼¥Í¥ë 2.6.27 °Ê¹ß¤Î Linux ¤ÇÍøÍѲÄǽ¤Ç¤¢¤ë¡£
314 ¤Ï Linux ¸ÇͤǤ¢¤ë¡£
316 ¼ÂºÝ¤Î Linux ¤Î¥·¥¹¥Æ¥à¥³¡¼¥ë¤Ç¤Ï
318 ¤È¤¤¤¦°ú¤¿ô¤¬ÄɲäÇɬÍפǤ¢¤ë¡£¤³¤Î°ú¤¿ô¤Ç
323 ¥é¥Ã¥Ñ¡¼´Ø¿ô¤Ë¤Ï¤³¤Î°ú¤¿ô¤Ï´Þ¤Þ¤ì¤º¡¢
324 ¥é¥Ã¥Ñ¡¼´Ø¿ô¤¬É¬ÍפÊÃͤò·×»»¤·¤ÆÆâÉô¤Ç¸Æ¤Ó½Ð¤¹¥·¥¹¥Æ¥à¥³¡¼¥ë¤ËÄ󶡤¹¤ë¡£
326 °ì¤Ä¤Î¥×¥í¥»¥¹¤ÏÊ£¿ô¤Î signalfd ¥Õ¥¡¥¤¥ë¥Ç¥£¥¹¥¯¥ê¥×¥¿¤òÀ¸À®¤¹¤ë¤³¤È¤¬¤Ç¤¤ë¡£
327 ¤³¤ì¤Ë¤è¤ê¡¢°Û¤Ê¤ë¥Õ¥¡¥¤¥ë¥Ç¥£¥¹¥¯¥ê¥×¥¿¤Ç°Û¤Ê¤ë¥·¥°¥Ê¥ë¤ò¼õ¤±¼è¤ë¤³¤È¤¬
332 ¤ò»È¤Ã¤Æ¥Õ¥¡¥¤¥ë¥Ç¥£¥¹¥¯¥ê¥×¥¿¤ò´Æ»ë¤¹¤ë¾ì¹ç¤ËÍÍѤ«¤â¤·¤ì¤Ê¤¤¡£
333 °Û¤Ê¤ë¥·¥°¥Ê¥ë¤¬ÅþÃ夹¤ë¤È¡¢°Û¤Ê¤ë¥Õ¥¡¥¤¥ë¥Ç¥£¥¹¥¯¥ê¥×¥¿¤¬ÍøÍѲÄǽ¤Ë
335 °ì¤Ä¤Î¥·¥°¥Ê¥ë¤¬Æó¤Ä°Ê¾å¤Î¥Õ¥¡¥¤¥ë¥Ç¥£¥¹¥¯¥ê¥×¥¿¤Î
337 ¤Ë´Þ¤Þ¤ì¤Æ¤¤¤ë¾ì¹ç¡¢¤½¤Î¥·¥°¥Ê¥ë¤ÎȯÀ¸¤Ï¤½¤Î¥·¥°¥Ê¥ë¤ò
339 ¤Ë´Þ¤à¥Õ¥¡¥¤¥ë¥Ç¥£¥¹¥¯¥ê¥×¥¿¤Î¤¦¤Á¤¤¤º¤ì¤«°ì¤Ä¤«¤éÆɤ߽Ф¹¤³¤È¤¬¤Ç¤¤ë¡£
340 .SH ²¼Áؤˤ¢¤ë Linux ¤Î¥·¥¹¥Æ¥à¥³¡¼¥ë
341 ²¼Áؤˤ¢¤ë Linux ¥·¥¹¥Æ¥à¥³¡¼¥ë¤ÏÆó¼ïÎढ¤ê¡¢
349 °ú¤¿ô¤ò¼ÂÁõ¤·¤Æ¤¤¤Ê¤¤¡£
358 ¤¬ÍøÍѲÄǽ¤Ç¤¢¤ì¤Ð¡¢¤³¤ì¤ò»ÈÍѤ¹¤ë¡£
360 ¥«¡¼¥Í¥ë 2.6.25 ¤è¤êÁ°¤Ç¤Ï¡¢
362 ¤Ë¤è¤êÁ÷¿®¤µ¤ì¤¿¥·¥°¥Ê¥ë¤È°ì½ï¤ËÅϤµ¤ì¤ë¥Ç¡¼¥¿¤Ç¤Ï¡¢¥Õ¥£¡¼¥ë¥É
367 .\" The fix also was put into 2.6.24.5
369 ²¼µ¤Î¥×¥í¥°¥é¥à¤Ï¡¢¥·¥°¥Ê¥ë
373 ¤ò signalfd ¥Õ¥¡¥¤¥ë¥Ç¥£¥¹¥¯¥ê¥×¥¿·Ðͳ¤Ç¼õ¿®¤¹¤ë¡£
376 ¼õ¿®¸å¤Ë¥×¥í¥°¥é¥à¤Ï½ªÎ»¤¹¤ë¡£
377 °Ê²¼¤Ë¼¨¤¹¥·¥§¥ë¥»¥Ã¥·¥ç¥ó¤Ë¤³¤Î¥×¥í¥°¥é¥à¤Î»È¤¤Êý¤ò¼¨¤¹¡£
381 .RB "$" " ./signalfd_demo"
382 .BR "^C" " # Control\-C generates SIGINT"
386 \fB^\\\fP # Control\-\\ generates SIGQUIT
391 .SS ¥×¥í¥°¥é¥à¤Î¥½¡¼¥¹
394 #include <sys/signalfd.h>
400 #define handle_error(msg) \\
401 do { perror(msg); exit(EXIT_FAILURE); } while (0)
404 main(int argc, char *argv[])
408 struct signalfd_siginfo fdsi;
412 sigaddset(&mask, SIGINT);
413 sigaddset(&mask, SIGQUIT);
415 /* Block signals so that they aren\(aqt handled
416 according to their default dispositions */
418 if (sigprocmask(SIG_BLOCK, &mask, NULL) == \-1)
419 handle_error("sigprocmask");
421 sfd = signalfd(\-1, &mask, 0);
423 handle_error("signalfd");
426 s = read(sfd, &fdsi, sizeof(struct signalfd_siginfo));
427 if (s != sizeof(struct signalfd_siginfo))
428 handle_error("read");
430 if (fdsi.ssi_signo == SIGINT) {
431 printf("Got SIGINT\\n");
432 } else if (fdsi.ssi_signo == SIGQUIT) {
433 printf("Got SIGQUIT\\n");
436 printf("Read unexpected signal\\n");
449 .BR timerfd_create (2),