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 .\" 2008-10-10, mtk: describe eventfd2(), and EFD_NONBLOCK and EFD_CLOEXEC
21 .\" Japanese Version Copyright (c) 2008 Akihiro MOTOKI
22 .\" all rights reserved.
23 .\" Translated 2008-04-08, Akihiro MOTOKI <amotoki@dd.iij4u.or.jp>
24 .\" Updated 2008-11-10, Akihiro MOTOKI <amotoki@dd.iij4u.or.jp>, LDP v3.13
26 .TH EVENTFD 2 2009-01-26 Linux "Linux Programmer's Manual"
28 eventfd \- ¥¤¥Ù¥ó¥ÈÄÌÃÎÍѤΥե¡¥¤¥ë¥Ç¥£¥¹¥¯¥ê¥×¥¿¤òÀ¸À®¤¹¤ë
30 .B #include <sys/eventfd.h>
32 .BI "int eventfd(unsigned int " initval ", int " flags );
35 ¤Ï "eventfd ¥ª¥Ö¥¸¥§¥¯¥È" ¤òÀ¸À®¤¹¤ë¡£
36 eventfd ¥ª¥Ö¥¸¥§¥¯¥È¤Ï¥æ¡¼¥¶¶õ´Ö¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¤¬¥¤¥Ù¥ó¥ÈÂÔ¤Á¼õ¤±/ÄÌÃÎÍѤÎ
37 »ÅÁȤߤȤ·¤Æ»È¤¦¤³¤È¤¬¤Ç¤¤ë¡£¤Þ¤¿¡¢¥«¡¼¥Í¥ë¤¬¥æ¡¼¥¶¶õ´Ö¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¤Ë
38 ¥¤¥Ù¥ó¥È¤òÄÌÃΤ¹¤ë¤¿¤á¤Ë¤â»È¤¦¤³¤È¤¬¤Ç¤¤ë¡£
39 ¤³¤Î¥ª¥Ö¥¸¥§¥¯¥È¤Ë¤Ï¡¢unsigned ¤Î 64 ¥Ó¥Ã¥ÈÀ°¿ô
41 ·¿¤Î¥«¥¦¥ó¥¿¤¬´Þ¤Þ¤ì¤Æ¤ª¤ê¡¢¤³¤Î¥«¥¦¥ó¥¿¤Ï¥«¡¼¥Í¥ë¤Ë¤è¤ê´ÉÍý¤µ¤ì¤ë¡£
44 °ú¤¿ô¤Ç»ØÄꤵ¤ì¤¿Ãͤǽé´ü²½¤µ¤ì¤ë¡£
46 Linux 2.6.27 °Ê¹ß¤Ç¤Ï¡¢
47 °Ê²¼¤ÎÃͤΤ¤¤¯¤Ä¤«¤ò¥Ó¥Ã¥Èñ°Ì¤ÎÏÀÍýÏ (OR) ¤Ç»ØÄꤹ¤ë¤³¤È¤Ç¡¢
49 ¤Î¿¶Éñ¤¤¤òÊѹ¹¤¹¤ë¤³¤È¤¬¤Ç¤¤ë¡£
52 ¿·¤·¤¯À¸À®¤µ¤ì¤ë¥ª¡¼¥×¥ó¥Õ¥¡¥¤¥ëµ½Ò (open file description) ¤Î
54 ¥Õ¥¡¥¤¥ë¥¹¥Æ¡¼¥¿¥¹¥Õ¥é¥°¤ò¥»¥Ã¥È¤¹¤ë¡£
55 ¤³¤Î¥Õ¥é¥°¤ò»È¤¦¤³¤È¤Ç¡¢
59 ¤òÄɲäǸƤӽФ¹É¬Íפ¬¤Ê¤¯¤Ê¤ë¡£
62 ¿·¤·¤¤¥Õ¥¡¥¤¥ë¥Ç¥£¥¹¥¯¥ê¥×¥¿¤ËÂФ·¤Æ
66 ¤³¤Î¥Õ¥é¥°¤¬Ìò¤ËΩ¤ÄÍýͳ¤Ë¤Ä¤¤¤Æ¤Ï¡¢
70 ¥Õ¥é¥°¤ÎÀâÌÀ¤ò»²¾È¤Î¤³¤È¡£
72 ¥Ð¡¼¥¸¥ç¥ó 2.6.26 °ÊÁ°¤Î Linux ¤Ç¤Ï¡¢
74 °ú¤¿ô¤Ï̤»ÈÍѤǤ¢¤ê¡¢0 ¤ò»ØÄꤷ¤Ê¤±¤ì¤Ð¤Ê¤é¤Ê¤¤¡£
77 ¤Ï eventfd ¥ª¥Ö¥¸¥§¥¯¥È¤ò»²¾È¤¹¤ë¤Î¤Ë»ÈÍѤǤ¤ë¿·¤·¤¤¥Õ¥¡¥¤¥ë¥Ç¥£¥¹¥¯¥ê¥×¥¿
78 ¤òÊÖ¤¹¡£ÊÖ¤µ¤ì¤¿¥Õ¥¡¥¤¥ë¥Ç¥£¥¹¥¯¥ê¥×¥¿¤ËÂФ·¤Æ¤Ï°Ê²¼¤ÎÁàºî¤ò¼Â¹Ô¤Ç¤¤ë¡£
81 eventfd ¥«¥¦¥ó¥¿¤¬ 0 °Ê³°¤ÎÃͤξì¹ç¡¢
83 ¤Ï¥«¥¦¥ó¥¿Ãͤò³ÊǼ¤·¤¿ 8 ¥Ð¥¤¥È¤ÎÃͤòÊÖ¤·¡¢
84 ¥«¥¦¥ó¥¿ÃÍ¤Ï 0 ¤Ë¥ê¥»¥Ã¥È¤µ¤ì¤ë
85 (ÊÖ¤êÃͤϥۥ¹¥È¡¦¥Ð¥¤¥È¥ª¡¼¥À¡¢¤Ä¤Þ¤ê
86 ¥Û¥¹¥È¥Þ¥·¥ó¤ÇÀ°¿ôɽ¸½¤ËËÜÍè»ÈÍѤµ¤ì¤ë¥Ð¥¤¥È¥ª¡¼¥À¤Ç³ÊǼ¤µ¤ì¤ë)¡£
89 ¤Î»þÅÀ¤Ç¥«¥¦¥ó¥¿¤¬ 0 ¤Î¾ì¹ç¡¢
91 ¤Ï¥«¥¦¥ó¥¿¤¬ 0 °Ê³°¤Ë¤Ê¤ë¤Þ¤ÇÄä»ß (block) ¤¹¤ë¡¢
92 ¤â¤·¤¯¤Ï¥Õ¥¡¥¤¥ë¥Ç¥£¥¹¥¯¥ê¥×¥¿¤¬ÈóÄä»ß (nonblocking)
93 ¤ËÀßÄꤵ¤ì¤Æ¤¤¤ë¾ì¹ç¤Ï¥¨¥é¡¼
97 ÅϤµ¤ì¤¿¥Ð¥Ã¥Õ¥¡¤ÎÂ礤µ¤¬ 8 ¥Ð¥¤¥È̤Ëþ¤Î¾ì¹ç¡¢
105 ¤Ï¡¢°ú¤¿ô¤Î¥Ð¥Ã¥Õ¥¡¤ÇÅϤµ¤ì¤¿ 8 ¥Ð¥¤¥È¤ÎÀ°¿ôÃͤò¥«¥¦¥ó¥¿¤Ë²Ã»»¤¹¤ë¡£
106 ¥«¥¦¥ó¥¿¤Ë³ÊǼ²Äǽ¤ÊºÇÂçÃÍ¤Ï unsigned ¤Î 64 ¥Ó¥Ã¥ÈÀ°¿ô¤ÎºÇÂçÃͤ«¤é
107 1 ¤ò°ú¤¤¤¿ÃÍ (¤¹¤Ê¤ï¤Á 0xfffffffffffffffe) ¤Ç¤¢¤ë¡£
108 ²Ã»»¤ò¹Ô¤¦¤È¥«¥¦¥ó¥¿Ãͤ¬ºÇÂçÃͤòĶ²á¤¹¤ë¾ì¹ç¤Ë¤Ï¡¢
109 ¤½¤Î¥Õ¥¡¥¤¥ë¥Ç¥£¥¹¥¯¥ê¥×¥¿¤ËÂФ·¤Æ
113 ¤ÏÄä»ß (block) ¤¹¤ë¡¢
114 ¤â¤·¤¯¤Ï¥Õ¥¡¥¤¥ë¥Ç¥£¥¹¥¯¥ê¥×¥¿¤¬ÈóÄä»ß (nonblocking)
115 ¤ËÀßÄꤵ¤ì¤Æ¤¤¤ë¾ì¹ç¤Ï¥¨¥é¡¼
119 ÅϤµ¤ì¤¿¥Ð¥Ã¥Õ¥¡¤ÎÂ礤µ¤¬ 8 ¥Ð¥¤¥È̤Ëþ¤Î¾ì¹ç¡¢¤â¤·¤¯¤Ï
120 ÃÍ 0xffffffffffffffff ¤ò½ñ¤¹þ¤â¤¦¤È¤·¤¿¾ì¹ç¡¢
126 .BR poll "(2), " select "(2) (¤ÈƱÍͤÎÁàºî)"
127 ÊÖ¤µ¤ì¤¿¥Õ¥¡¥¤¥ë¥Ç¥£¥¹¥¯¥ê¥×¥¿¤Ï¡¢
132 ¤ò¥µ¥Ý¡¼¥È¤·¤Æ¤ª¤ê¡¢°Ê²¼¤Î¤è¤¦¤ÊÆ°ºî¤ò¤¹¤ë¡£
135 ¥«¥¦¥ó¥¿¤¬ 0 ¤è¤êÂ礤¤Ãͤξì¹ç¡¢
136 ¥Õ¥¡¥¤¥ë¥Ç¥£¥¹¥¯¥ê¥×¥¿¤ÏÆɤ߽Ф·²Äǽ¤È¤Ê¤ë
146 ¾¯¤Ê¤¯¤È¤âÃÍ "1" ¤ò¡¢Ää»ß (block) ¤òȼ¤ï¤º¤Ë½ñ¤¹þ¤á¤ë¾ì¹ç¡¢
147 ¥Õ¥¡¥¤¥ë¥Ç¥£¥¹¥¯¥ê¥×¥¿¤Ï½ñ¤¹þ¤ß²Äǽ¤È¤Ê¤ë
157 ¥«¥¦¥ó¥¿ÃͤΥª¡¼¥Ð¡¼¥Õ¥í¡¼¤¬¸¡½Ð¤µ¤ì¤¿¾ì¹ç¡¢
159 ¤Ï¥Õ¥¡¥¤¥ë¥Ç¥£¥¹¥¯¥ê¥×¥¿¤ÏÆɤ߽Ф·²Äǽ¤È½ñ¤¹þ¤ß²Äǽ¤ÎξÊý¤òÄÌÃΤ·¡¢
166 ¤Ç¥«¥¦¥ó¥¿¤¬¥ª¡¼¥Ð¡¼¥Õ¥í¡¼¤¹¤ë¤³¤È¤Ï·è¤·¤Æ¤Ê¤¤¡£
167 ¤·¤«¤·¤Ê¤¬¤é¡¢ KAIO ¥µ¥Ö¥·¥¹¥Æ¥à¤Ë¤è¤Ã¤Æ 2^64 ²ó¤Î eventfd "signal posts" ¤¬
168 ¼Â¹Ô¤µ¤ì¤¿¾ì¹ç¤Ë¤Ï¥ª¡¼¥Ð¡¼¥Õ¥í¡¼¤¬µ¯¤³¤êÆÀ¤ë
169 (ÍýÏÀŪ¤Ë¤Ï¤¢¤êÆÀ¤ë¤¬¡¢¼ÂÍÑŪ¤Ë¤Ï¤¢¤êÆÀ¤Ê¤¤)¡£
170 ¥ª¡¼¥Ð¡¼¥Õ¥í¡¼¤¬È¯À¸¤·¤¿¾ì¹ç¡¢
174 ¤ÎºÇÂçÃÍ (¤¹¤Ê¤ï¤Á 0xffffffffffffffff) ¤òÊÖ¤¹¡£
177 eventfd ¥Õ¥¡¥¤¥ë¥Ç¥£¥¹¥¯¥ê¥×¥¿¤Ï¡¢¤³¤ì°Ê³°¤Î¥Õ¥¡¥¤¥ë¥Ç¥£¥¹¥¯¥ê¥×¥¿
185 ¥Õ¥¡¥¤¥ë¥Ç¥£¥¹¥¯¥ê¥×¥¿¤¬¤½¤ì°Ê¹ß¤ÏɬÍפʤ¯¤Ê¤Ã¤¿ºÝ¤Ë¤Ï¡¢¥¯¥í¡¼¥º¤¹¤Ù¤¤Ç¤¢¤ë¡£
186 Ʊ¤¸ eventfd ¥ª¥Ö¥¸¥§¥¯¥È¤Ë´ØÏ¢ÉÕ¤±¤é¤ì¤¿¥Õ¥¡¥¤¥ë¥Ç¥£¥¹¥¯¥ê¥×¥¿¤¬Á´¤Æ
187 ¥¯¥í¡¼¥º¤µ¤ì¤ë¤È¡¢¤½¤Î¥ª¥Ö¥¸¥§¥¯¥ÈÍѤλñ¸»¤¬¥«¡¼¥Í¥ë¤Ë¤è¤ê²òÊü¤µ¤ì¤ë¡£
190 ¤ÇÀ¸À®¤µ¤ì¤¿»Ò¥×¥í¥»¥¹¤Ï¡¢
192 ¤ÇÀ¸À®¤µ¤ì¤¿¥Õ¥¡¥¤¥ë¥Ç¥£¥¹¥¯¥ê¥×¥¿¤Î¥³¥Ô¡¼¤ò·Ñ¾µ¤¹¤ë¡£
193 Ê£À½¤µ¤ì¤¿¥Õ¥¡¥¤¥ë¥Ç¥£¥¹¥¯¥ê¥×¥¿¤ÏƱ¤¸ eventfd ¥ª¥Ö¥¸¥§¥¯¥È¤Ë´ØÏ¢ÉÕ¤±¤é¤ì¤ë¡£
197 ¤ÇÀ¸À®¤µ¤ì¤¿¥Õ¥¡¥¤¥ë¥Ç¥£¥¹¥¯¥ê¥×¥¿¤ÏÊÝ»ý¤µ¤ì¤ë¡£
201 ¤Ï¿·µ¬¤Î eventfd ¥Õ¥¡¥¤¥ë¥Ç¥£¥¹¥¯¥ê¥×¥¿¤òÊÖ¤¹¡£
202 ¥¨¥é¡¼¤Î¾ì¹ç¡¢\-1 ¤òÊÖ¤·¡¢
204 ¤Ë¥¨¥é¡¼¤ò¼¨¤¹ÃͤòÀßÄꤹ¤ë¡£
210 Linux 2.6.26 °ÊÁ°¤Ç¤Ï¡¢
215 ¥ª¡¼¥×¥óºÑ¤ß¤Î¥Õ¥¡¥¤¥ë¥Ç¥£¥¹¥¯¥ê¥×¥¿¤Î¿ô¤¬¥×¥í¥»¥¹¤¢¤¿¤ê¤Î¾å¸Â¤Ë
219 ¥ª¡¼¥×¥óºÑ¤ß¤Î¥Õ¥¡¥¤¥ëÁí¿ô¤¬¥·¥¹¥Æ¥àÁ´ÂΤξå¸Â¤Ë㤷¤Æ¤¤¤¿¡£
222 .\" Note from Davide:
223 .\" The ENODEV error is basically never going to happen if
224 .\" the kernel boots correctly. That error happen only if during
225 .\" the kernel initialization, some error occur in the anonymous
226 .\" inode source initialization.
227 (¥«¡¼¥Í¥ëÆâ¤Î) ̵̾ inode ¥Ç¥Ð¥¤¥¹¤ò¥Þ¥¦¥ó¥È¤Ç¤¤Ê¤«¤Ã¤¿¡£
230 ¿·¤·¤¤ eventfd ¥Õ¥¡¥¤¥ë¥Ç¥£¥¹¥¯¥ê¥×¥¿¤òÀ¸À®¤¹¤ë¤Î¤Ë½½Ê¬¤Ê¥á¥â¥ê¤¬¤Ê¤«¤Ã¤¿¡£
233 ¤Ï¥«¡¼¥Í¥ë 2.6.22 °Ê¹ß¤Î Linux ¤ÇÍøÍѲÄǽ¤Ç¤¢¤ë¡£
234 Àµ¤·¤¯Æ°ºî¤¹¤ë glibc ¦¤Î¥µ¥Ý¡¼¥È¤Ï¥Ð¡¼¥¸¥ç¥ó 2.8 °Ê¹ß¤ÇÄ󶡤µ¤ì¤Æ¤¤¤ë¡£
235 .\" eventfd() is in glibc 2.7, but reportedly does not build
237 ¥·¥¹¥Æ¥à¥³¡¼¥ë (¡ÖÃí°Õ¡×»²¾È) ¤Ï
238 ¥«¡¼¥Í¥ë 2.6.27 °Ê¹ß¤Î Linux ¤ÇÍøÍѲÄǽ¤Ç¤¢¤ë¡£
239 ¥Ð¡¼¥¸¥ç¥ó 2.9 °Ê¹ß¤Ç¤Ï¡¢glibc ¤Î
241 ¤Î¥é¥Ã¥Ñ¡¼´Ø¿ô¤Ï¡¢¥«¡¼¥Í¥ë¤¬Âбþ¤·¤Æ¤¤¤ì¤Ð
243 ¥·¥¹¥Æ¥à¥³¡¼¥ë¤òÍøÍѤ¹¤ë¡£
248 ¤Ï Linux ¸ÇͤǤ¢¤ë¡£
250 ¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¤Ï¡¢¥Ñ¥¤¥×¤ò¥¤¥Ù¥ó¥È¤òÄÌÃΤ¹¤ë¤¿¤á¤À¤±¤Ë»ÈÍѤ·¤Æ¤¤¤ë
251 Á´¤Æ¤Î¾ìÌ̤ˤª¤¤¤Æ¡¢¥Ñ¥¤¥×¤ÎÂå¤ï¤ê¤Ë eventfd ¥Õ¥¡¥¤¥ë¥Ç¥£¥¹¥¯¥ê¥×¥¿¤ò
252 »ÈÍѤ¹¤ë¤³¤È¤¬¤Ç¤¤ë¡£
253 eventfd ¥Õ¥¡¥¤¥ë¥Ç¥£¥¹¥¯¥ê¥×¥¿¤ò»È¤¦Êý¤¬¡¢¥Ñ¥¤¥×¤ò»È¤¦¾ì¹ç¤ËÈæ¤Ù¤Æ
254 ¥«¡¼¥Í¥ë¤Ç¤Î¥ª¡¼¥Ð¥Ø¥Ã¥É¤ÏÈæ¤Ù¤ë¤È¤º¤Ã¤È¾®¤µ¤¯¡¢¥Õ¥¡¥¤¥ë¥Ç¥£¥¹¥¯¥ê¥×¥¿¤â
255 °ì¤Ä¤·¤«É¬ÍפȤ·¤Ê¤¤ (¥Ñ¥¤¥×¤Î¾ì¹ç¤ÏÆó¤ÄɬÍפǤ¢¤ë)¡£
257 ¥«¡¼¥Í¥ëÆâ¤Ç»ÈÍѤ¹¤ë¤È¡¢eventfd ¥Õ¥¡¥¤¥ë¥Ç¥£¥¹¥¯¥ê¥×¥¿¤Ï
258 ¥«¡¼¥Í¥ë¶õ´Ö¤È¥æ¡¼¥¶¶õ´Ö¤Î¥Ö¥ê¥Ã¥¸µ¡Ç½¤òÄ󶡤¹¤ë¤³¤È¤¬¤Ç¤¡¢
259 Î㤨¤Ð KAIO (kernel AIO)
260 .\" ¤ä eventually syslets/threadlets
261 ¤Î¤è¤¦¤Êµ¡Ç½¤¬¡¢¤¢¤ë¥Õ¥¡¥¤¥ë¥Ç¥£¥¹¥¯¥ê¥×¥¿¤Ë²¿¤é¤«¤ÎÁàºî¤¬´°Î»¤·¤¿¤³¤È¤ò
262 ÄÌÃΤ¹¤ë¤³¤È¤¬¤Ç¤¤ë¡£
264 eventfd ¥Õ¥¡¥¤¥ë¥Ç¥£¥¹¥¯¥ê¥×¥¿¤Î½ÅÍפÊÅÀ¤Ï¡¢
265 eventfd ¥Õ¥¡¥¤¥ë¥Ç¥£¥¹¥¯¥ê¥×¥¿¤¬
269 ¤ò»È¤Ã¤Æ¾¤Î¥Õ¥¡¥¤¥ë¥Ç¥£¥¹¥¯¥ê¥×¥¿¤ÈÁ´¤¯Æ±Íͤ˴ƻë¤Ç¤¤ëÅÀ¤Ç¤¢¤ë¡£
270 ¤³¤Î¤³¤È¤Ï¡¢¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¤Ï¡Ö½¾Íè¤Î (traditional)¡× ¥Õ¥¡¥¤¥ë¤Î¾õÂÖÊѲ½¤È
271 eventfd ¥¤¥ó¥¿¥Õ¥§¡¼¥¹¤ò¥µ¥Ý¡¼¥È¤¹¤ë¾¤Î¥«¡¼¥Í¥ëµ¡¹½¤Î¾õÂÖÊѲ½¤òƱ»þ¤Ë´Æ»ë
274 ¥¤¥ó¥¿¥Õ¥§¡¼¥¹¤¬¤Ê¤¤»þ¤Ë¤Ï¡¢¤³¤ì¤é¤Î¥«¡¼¥Í¥ëµ¡¹½¤Ï
278 ·Ðͳ¤Ç¿½Å¤¹¤ë¤³¤È¤Ï¤Ç¤¤Ê¤«¤Ã¤¿)¡£
279 .SS ²¼Áؤˤ¢¤ë Linux ¤Î¥·¥¹¥Æ¥à¥³¡¼¥ë
280 ²¼Áؤˤ¢¤ë Linux ¥·¥¹¥Æ¥à¥³¡¼¥ë¤ÏÆó¼ïÎढ¤ê¡¢
288 °ú¤¿ô¤ò¼ÂÁõ¤·¤Æ¤¤¤Ê¤¤¡£
293 glibc ¤Î¥é¥Ã¥Ñ¡¼´Ø¿ô¤Ï¡¢
295 ¤¬ÍøÍѲÄǽ¤Ç¤¢¤ì¤Ð¡¢¤³¤ì¤ò»ÈÍѤ¹¤ë¡£
297 GNU C ¥é¥¤¥Ö¥é¥ê¤Ï¡¢eventfd ¥Õ¥¡¥¤¥ë¥Ç¥£¥¹¥¯¥ê¥×¥¿¤ÎÆɤ߽Ф·¤È½ñ¤¹þ¤ß¤Ë
298 ¤ò´Ø¤¹¤ë¾ÜºÙ¤Î¤¤¤¯¤Ä¤«Ãê¾Ý²½¤¹¤ë¤¿¤á¤Ë¡¢°ì¤Ä¤Î·¿¤È¡¢Æó¤Ä¤Î´Ø¿ô¤òÄɲäÇ
303 typedef uint64_t eventfd_t;
305 int eventfd_read(int fd, eventfd_t *value);
306 int eventfd_write(int fd, eventfd_t value);
310 ¤³¤ì¤é¤Î´Ø¿ô¤Ï¡¢eventfd ¥Õ¥¡¥¤¥ë¥Ç¥£¥¹¥¯¥ê¥×¥¿¤ËÂФ¹¤ëÆɤ߽Ф·¤È
311 ½ñ¤¹þ¤ß¤ÎÁàºî¤ò¼Â¹Ô¤·¡¢Àµ¤·¤¤¥Ð¥¤¥È¿ô¤¬Å¾Á÷¤µ¤ì¤¿¾ì¹ç¤Ë¤Ï
312 0 ¤òÊÖ¤·¡¢¤½¤¦¤Ç¤Ê¤¤¾ì¹ç¤Ï \-1 ¤òÊÖ¤¹¡£
315 °Ê²¼¤Î¥×¥í¥°¥é¥à¤Ï eventfd ¥Õ¥¡¥¤¥ë¥Ç¥£¥¹¥¯¥ê¥×¥¿¤òÀ¸À®¤·¡¢
316 ¤½¤Î¸å fork ¤ò¼Â¹Ô¤·¤Æ»Ò¥×¥í¥»¥¹¤òÀ¸À®¤¹¤ë¡£
317 ¿Æ¥×¥í¥»¥¹¤¬¾¯¤·¤Î´Ö sleep ¤¹¤ë´Ö¤Ë¡¢»Ò¥×¥í¥»¥¹¤Ï
318 ¥×¥í¥°¥é¥à¤Î¥³¥Þ¥ó¥É¥é¥¤¥ó°ú¤¿ô¤Ç»ØÄꤵ¤ì¤¿À°¿ô(Îó)¤ò¤½¤ì¤¾¤ì
319 eventfd ¥Õ¥¡¥¤¥ë¥Ç¥£¥¹¥¯¥ê¥×¥¿¤Ë½ñ¤¹þ¤à¡£
320 ¿Æ¥×¥í¥»¥¹¤Ï sleep ¤ò´°Î»¤¹¤ë¤È eventfd ¥Õ¥¡¥¤¥ë¥Ç¥£¥¹¥¯¥ê¥×¥¿¤«¤é
323 °Ê²¼¤Ë¼¨¤¹¥·¥§¥ë¥»¥Ã¥·¥ç¥ó¤Ë¤³¤Î¥×¥í¥°¥é¥à¤Î»È¤¤Êý¤ò¼¨¤¹¡£
327 .RB "$" " ./a.out 1 2 4 7 14"
328 Child writing 1 to efd
329 Child writing 2 to efd
330 Child writing 4 to efd
331 Child writing 7 to efd
332 Child writing 14 to efd
333 Child completed write loop
335 Parent read 28 (0x1c) from efd
338 .SS ¥×¥í¥°¥é¥à¤Î¥½¡¼¥¹
341 #include <sys/eventfd.h>
345 #include <stdint.h> /* Definition of uint64_t */
347 #define handle_error(msg) \\
348 do { perror(msg); exit(EXIT_FAILURE); } while (0)
351 main(int argc, char *argv[])
358 fprintf(stderr, "Usage: %s <num>...\\n", argv[0]);
364 handle_error("eventfd");
368 for (j = 1; j < argc; j++) {
369 printf("Child writing %s to efd\\n", argv[j]);
370 u = strtoull(argv[j], NULL, 0);
371 /* strtoull() allows various bases */
372 s = write(efd, &u, sizeof(uint64_t));
373 if (s != sizeof(uint64_t))
374 handle_error("write");
376 printf("Child completed write loop\\n");
383 printf("Parent about to read\\n");
384 s = read(efd, &u, sizeof(uint64_t));
385 if (s != sizeof(uint64_t))
386 handle_error("read");
387 printf("Parent read %llu (0x%llx) from efd\\n",
388 (unsigned long long) u, (unsigned long long) u);
392 handle_error("fork");
403 .BR timerfd_create (2),