OSDN Git Service

(split) Import translated manuals from JM CVS Repository.
[linuxjm/LDP_man-pages.git] / release / man2 / eventfd.2
1 .\" Copyright (C) 2008 Michael Kerrisk <mtk.manpages@gmail.com>
2 .\" starting from a version by Davide Libenzi <davidel@xmailserver.org>
3 .\"
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.
8 .\"
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.
13 .\"
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,
17 .\" MA  02111-1307  USA
18 .\"
19 .\" 2008-10-10, mtk: describe eventfd2(), and EFD_NONBLOCK and EFD_CLOEXEC
20 .\"
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
25 .\" 
26 .TH EVENTFD 2 2009-01-26 Linux "Linux Programmer's Manual"
27 .SH Ì¾Á°
28 eventfd \- ¥¤¥Ù¥ó¥ÈÄÌÃÎÍѤΥե¡¥¤¥ë¥Ç¥£¥¹¥¯¥ê¥×¥¿¤òÀ¸À®¤¹¤ë
29 .SH ½ñ¼°
30 .B #include <sys/eventfd.h>
31 .sp
32 .BI "int eventfd(unsigned int " initval ", int " flags );
33 .SH ÀâÌÀ
34 .BR eventfd ()
35 ¤Ï "eventfd ¥ª¥Ö¥¸¥§¥¯¥È" ¤òÀ¸À®¤¹¤ë¡£
36 eventfd ¥ª¥Ö¥¸¥§¥¯¥È¤Ï¥æ¡¼¥¶¶õ´Ö¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¤¬¥¤¥Ù¥ó¥ÈÂÔ¤Á¼õ¤±/ÄÌÃÎÍѤÎ
37 »ÅÁȤߤȤ·¤Æ»È¤¦¤³¤È¤¬¤Ç¤­¤ë¡£¤Þ¤¿¡¢¥«¡¼¥Í¥ë¤¬¥æ¡¼¥¶¶õ´Ö¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¤Ë
38 ¥¤¥Ù¥ó¥È¤òÄÌÃΤ¹¤ë¤¿¤á¤Ë¤â»È¤¦¤³¤È¤¬¤Ç¤­¤ë¡£
39 ¤³¤Î¥ª¥Ö¥¸¥§¥¯¥È¤Ë¤Ï¡¢unsigned ¤Î 64 ¥Ó¥Ã¥ÈÀ°¿ô
40 .RI ( uint64_t )
41 ·¿¤Î¥«¥¦¥ó¥¿¤¬´Þ¤Þ¤ì¤Æ¤ª¤ê¡¢¤³¤Î¥«¥¦¥ó¥¿¤Ï¥«¡¼¥Í¥ë¤Ë¤è¤ê´ÉÍý¤µ¤ì¤ë¡£
42 ¤³¤Î¥«¥¦¥ó¥¿¤Ï
43 .I initval
44 °ú¤­¿ô¤Ç»ØÄꤵ¤ì¤¿Ãͤǽé´ü²½¤µ¤ì¤ë¡£
45
46 Linux 2.6.27 °Ê¹ß¤Ç¤Ï¡¢
47 °Ê²¼¤ÎÃͤΤ¤¤¯¤Ä¤«¤ò¥Ó¥Ã¥Èñ°Ì¤ÎÏÀÍýÏ (OR) ¤Ç»ØÄꤹ¤ë¤³¤È¤Ç¡¢
48 .BR eventfd ()
49 ¤Î¿¶Éñ¤¤¤òÊѹ¹¤¹¤ë¤³¤È¤¬¤Ç¤­¤ë¡£
50 .TP 14
51 .B EFD_NONBLOCK
52 ¿·¤·¤¯À¸À®¤µ¤ì¤ë¥ª¡¼¥×¥ó¥Õ¥¡¥¤¥ëµ­½Ò (open file description) ¤Î
53 .B O_NONBLOCK
54 ¥Õ¥¡¥¤¥ë¥¹¥Æ¡¼¥¿¥¹¥Õ¥é¥°¤ò¥»¥Ã¥È¤¹¤ë¡£
55 ¤³¤Î¥Õ¥é¥°¤ò»È¤¦¤³¤È¤Ç¡¢
56 .B O_NONBLOCK
57 ¤ò¥»¥Ã¥È¤¹¤ë¤¿¤á¤Ë
58 .BR fcntl (2)
59 ¤òÄɲäǸƤӽФ¹É¬Íפ¬¤Ê¤¯¤Ê¤ë¡£
60 .TP
61 .B EFD_CLOEXEC
62 ¿·¤·¤¤¥Õ¥¡¥¤¥ë¥Ç¥£¥¹¥¯¥ê¥×¥¿¤ËÂФ·¤Æ
63 close-on-exec
64 .RB ( FD_CLOEXEC )
65 ¥Õ¥é¥°¤ò¥»¥Ã¥È¤¹¤ë¡£
66 ¤³¤Î¥Õ¥é¥°¤¬Ìò¤ËΩ¤ÄÍýͳ¤Ë¤Ä¤¤¤Æ¤Ï¡¢
67 .BR open (2)
68 ¤Î
69 .B O_CLOEXEC
70 ¥Õ¥é¥°¤ÎÀâÌÀ¤ò»²¾È¤Î¤³¤È¡£
71 .PP
72 ¥Ð¡¼¥¸¥ç¥ó 2.6.26 °ÊÁ°¤Î Linux ¤Ç¤Ï¡¢
73 .I flags
74 °ú¤­¿ô¤Ï̤»ÈÍѤǤ¢¤ê¡¢0 ¤ò»ØÄꤷ¤Ê¤±¤ì¤Ð¤Ê¤é¤Ê¤¤¡£
75
76 .BR eventfd ()
77 ¤Ï eventfd ¥ª¥Ö¥¸¥§¥¯¥È¤ò»²¾È¤¹¤ë¤Î¤Ë»ÈÍѤǤ­¤ë¿·¤·¤¤¥Õ¥¡¥¤¥ë¥Ç¥£¥¹¥¯¥ê¥×¥¿
78 ¤òÊÖ¤¹¡£ÊÖ¤µ¤ì¤¿¥Õ¥¡¥¤¥ë¥Ç¥£¥¹¥¯¥ê¥×¥¿¤ËÂФ·¤Æ¤Ï°Ê²¼¤ÎÁàºî¤ò¼Â¹Ô¤Ç¤­¤ë¡£
79 .TP
80 .BR read (2)
81 eventfd ¥«¥¦¥ó¥¿¤¬ 0 °Ê³°¤ÎÃͤξì¹ç¡¢
82 .BR read (2)
83 ¤Ï¥«¥¦¥ó¥¿Ãͤò³ÊǼ¤·¤¿ 8 ¥Ð¥¤¥È¤ÎÃͤòÊÖ¤·¡¢
84 ¥«¥¦¥ó¥¿ÃͤϠ0 ¤Ë¥ê¥»¥Ã¥È¤µ¤ì¤ë
85 (ÊÖ¤êÃͤϥۥ¹¥È¡¦¥Ð¥¤¥È¥ª¡¼¥À¡¢¤Ä¤Þ¤ê
86 ¥Û¥¹¥È¥Þ¥·¥ó¤ÇÀ°¿ôɽ¸½¤ËËÜÍè»ÈÍѤµ¤ì¤ë¥Ð¥¤¥È¥ª¡¼¥À¤Ç³ÊǼ¤µ¤ì¤ë)¡£
87 .IP
88 .BR read (2)
89 ¤Î»þÅÀ¤Ç¥«¥¦¥ó¥¿¤¬ 0 ¤Î¾ì¹ç¡¢
90 .BR read (2)
91 ¤Ï¥«¥¦¥ó¥¿¤¬ 0 °Ê³°¤Ë¤Ê¤ë¤Þ¤ÇÄä»ß (block) ¤¹¤ë¡¢
92 ¤â¤·¤¯¤Ï¥Õ¥¡¥¤¥ë¥Ç¥£¥¹¥¯¥ê¥×¥¿¤¬ÈóÄä»ß (nonblocking)
93 ¤ËÀßÄꤵ¤ì¤Æ¤¤¤ë¾ì¹ç¤Ï¥¨¥é¡¼
94 .B EAGAIN
95 ¤Ç¼ºÇÔ¤¹¤ë¡£
96 .IP
97 ÅϤµ¤ì¤¿¥Ð¥Ã¥Õ¥¡¤ÎÂ礭¤µ¤¬ 8 ¥Ð¥¤¥È̤Ëþ¤Î¾ì¹ç¡¢
98 .BR read (2)
99 ¤Ï¥¨¥é¡¼
100 .B EINVAL
101 ¤Ç¼ºÇÔ¤¹¤ë¡£
102 .TP
103 .BR write (2)
104 .BR write (2)
105 ¤Ï¡¢°ú¤­¿ô¤Î¥Ð¥Ã¥Õ¥¡¤ÇÅϤµ¤ì¤¿ 8 ¥Ð¥¤¥È¤ÎÀ°¿ôÃͤò¥«¥¦¥ó¥¿¤Ë²Ã»»¤¹¤ë¡£
106 ¥«¥¦¥ó¥¿¤Ë³ÊǼ²Äǽ¤ÊºÇÂçÃͤϠunsigned ¤Î 64 ¥Ó¥Ã¥ÈÀ°¿ô¤ÎºÇÂçÃͤ«¤é
107 1 ¤ò°ú¤¤¤¿ÃÍ (¤¹¤Ê¤ï¤Á 0xfffffffffffffffe) ¤Ç¤¢¤ë¡£
108 ²Ã»»¤ò¹Ô¤¦¤È¥«¥¦¥ó¥¿Ãͤ¬ºÇÂçÃͤòĶ²á¤¹¤ë¾ì¹ç¤Ë¤Ï¡¢
109 ¤½¤Î¥Õ¥¡¥¤¥ë¥Ç¥£¥¹¥¯¥ê¥×¥¿¤ËÂФ·¤Æ
110 .BR read (2)
111 ¤¬¼Â¹Ô¤µ¤ì¤ë¤Þ¤Ç¡¢
112 .BR write (2)
113 ¤ÏÄä»ß (block) ¤¹¤ë¡¢
114 ¤â¤·¤¯¤Ï¥Õ¥¡¥¤¥ë¥Ç¥£¥¹¥¯¥ê¥×¥¿¤¬ÈóÄä»ß (nonblocking)
115 ¤ËÀßÄꤵ¤ì¤Æ¤¤¤ë¾ì¹ç¤Ï¥¨¥é¡¼
116 .B EAGAIN
117 ¤Ç¼ºÇÔ¤¹¤ë¡£
118 .IP
119 ÅϤµ¤ì¤¿¥Ð¥Ã¥Õ¥¡¤ÎÂ礭¤µ¤¬ 8 ¥Ð¥¤¥È̤Ëþ¤Î¾ì¹ç¡¢¤â¤·¤¯¤Ï
120 ÃÍ 0xffffffffffffffff ¤ò½ñ¤­¹þ¤â¤¦¤È¤·¤¿¾ì¹ç¡¢
121 .BR write (2)
122 ¤Ï¥¨¥é¡¼
123 .B EINVAL
124 ¤Ç¼ºÇÔ¤¹¤ë¡£
125 .TP
126 .BR poll "(2), " select "(2) (¤ÈƱÍͤÎÁàºî)"
127 ÊÖ¤µ¤ì¤¿¥Õ¥¡¥¤¥ë¥Ç¥£¥¹¥¯¥ê¥×¥¿¤Ï¡¢
128 .BR poll (2)
129 .RB ( epoll (7)
130 ¤âƱ¤¸) ¤ä
131 .BR select (2)
132 ¤ò¥µ¥Ý¡¼¥È¤·¤Æ¤ª¤ê¡¢°Ê²¼¤Î¤è¤¦¤ÊÆ°ºî¤ò¤¹¤ë¡£
133 .RS
134 .IP * 3
135 ¥«¥¦¥ó¥¿¤¬ 0 ¤è¤êÂ礭¤¤Ãͤξì¹ç¡¢
136 ¥Õ¥¡¥¤¥ë¥Ç¥£¥¹¥¯¥ê¥×¥¿¤ÏÆɤ߽Ф·²Äǽ¤È¤Ê¤ë
137 .RB ( select (2)
138 ¤Î
139 .I readfds
140 °ú¤­¿ô¤ä
141 .BR poll (2)
142 ¤Î
143 .B POLLIN
144 ¥Õ¥é¥°)¡£
145 .IP *
146 ¾¯¤Ê¤¯¤È¤âÃÍ "1" ¤ò¡¢Ää»ß (block) ¤òȼ¤ï¤º¤Ë½ñ¤­¹þ¤á¤ë¾ì¹ç¡¢
147 ¥Õ¥¡¥¤¥ë¥Ç¥£¥¹¥¯¥ê¥×¥¿¤Ï½ñ¤­¹þ¤ß²Äǽ¤È¤Ê¤ë
148 .RB ( select (2)
149 ¤Î
150 .I writefds
151 °ú¤­¿ô¤ä
152 .BR poll (2)
153 ¤Î
154 .B POLLOUT
155 ¥Õ¥é¥°)¡£
156 .IP *
157 ¥«¥¦¥ó¥¿ÃͤΥª¡¼¥Ð¡¼¥Õ¥í¡¼¤¬¸¡½Ð¤µ¤ì¤¿¾ì¹ç¡¢
158 .BR select (2)
159 ¤Ï¥Õ¥¡¥¤¥ë¥Ç¥£¥¹¥¯¥ê¥×¥¿¤ÏÆɤ߽Ф·²Äǽ¤È½ñ¤­¹þ¤ß²Äǽ¤ÎξÊý¤òÄÌÃΤ·¡¢
160 .BR poll (2)
161 ¤Ï
162 .B POLLERR
163 ¥¤¥Ù¥ó¥È¤òÊÖ¤¹¡£
164 ¾å½Ò¤ÎÄ̤ꡢ
165 .BR write (2)
166 ¤Ç¥«¥¦¥ó¥¿¤¬¥ª¡¼¥Ð¡¼¥Õ¥í¡¼¤¹¤ë¤³¤È¤Ï·è¤·¤Æ¤Ê¤¤¡£
167 ¤·¤«¤·¤Ê¤¬¤é¡¢ KAIO ¥µ¥Ö¥·¥¹¥Æ¥à¤Ë¤è¤Ã¤Æ 2^64 ²ó¤Î eventfd "signal posts" ¤¬
168 ¼Â¹Ô¤µ¤ì¤¿¾ì¹ç¤Ë¤Ï¥ª¡¼¥Ð¡¼¥Õ¥í¡¼¤¬µ¯¤³¤êÆÀ¤ë
169 (ÍýÏÀŪ¤Ë¤Ï¤¢¤êÆÀ¤ë¤¬¡¢¼ÂÍÑŪ¤Ë¤Ï¤¢¤êÆÀ¤Ê¤¤)¡£
170 ¥ª¡¼¥Ð¡¼¥Õ¥í¡¼¤¬È¯À¸¤·¤¿¾ì¹ç¡¢
171 .BR read (2)
172 ¤Ï
173 .I uint64_t
174 ¤ÎºÇÂçÃÍ (¤¹¤Ê¤ï¤Á 0xffffffffffffffff) ¤òÊÖ¤¹¡£
175 .RE
176 .IP
177 eventfd ¥Õ¥¡¥¤¥ë¥Ç¥£¥¹¥¯¥ê¥×¥¿¤Ï¡¢¤³¤ì°Ê³°¤Î¥Õ¥¡¥¤¥ë¥Ç¥£¥¹¥¯¥ê¥×¥¿
178 ¿½Å API ¤Ç¤¢¤ë
179 .BR pselect (2),
180 .BR ppoll (2),
181 .BR epoll (7)
182 ¤â¥µ¥Ý¡¼¥È¤·¤Æ¤¤¤ë¡£
183 .TP
184 .BR close (2)
185 ¥Õ¥¡¥¤¥ë¥Ç¥£¥¹¥¯¥ê¥×¥¿¤¬¤½¤ì°Ê¹ß¤ÏɬÍפʤ¯¤Ê¤Ã¤¿ºÝ¤Ë¤Ï¡¢¥¯¥í¡¼¥º¤¹¤Ù¤­¤Ç¤¢¤ë¡£
186 Ʊ¤¸ eventfd ¥ª¥Ö¥¸¥§¥¯¥È¤Ë´ØÏ¢ÉÕ¤±¤é¤ì¤¿¥Õ¥¡¥¤¥ë¥Ç¥£¥¹¥¯¥ê¥×¥¿¤¬Á´¤Æ
187 ¥¯¥í¡¼¥º¤µ¤ì¤ë¤È¡¢¤½¤Î¥ª¥Ö¥¸¥§¥¯¥ÈÍѤλñ¸»¤¬¥«¡¼¥Í¥ë¤Ë¤è¤ê²òÊü¤µ¤ì¤ë¡£
188 .PP
189 .BR fork (2)
190 ¤ÇÀ¸À®¤µ¤ì¤¿»Ò¥×¥í¥»¥¹¤Ï¡¢
191 .BR eventfd ()
192 ¤ÇÀ¸À®¤µ¤ì¤¿¥Õ¥¡¥¤¥ë¥Ç¥£¥¹¥¯¥ê¥×¥¿¤Î¥³¥Ô¡¼¤ò·Ñ¾µ¤¹¤ë¡£
193 Ê£À½¤µ¤ì¤¿¥Õ¥¡¥¤¥ë¥Ç¥£¥¹¥¯¥ê¥×¥¿¤ÏƱ¤¸ eventfd ¥ª¥Ö¥¸¥§¥¯¥È¤Ë´ØÏ¢ÉÕ¤±¤é¤ì¤ë¡£
194 .BR execve (2)
195 ¤ÎÁ°¸å¤Ç
196 .BR eventfd ()
197 ¤ÇÀ¸À®¤µ¤ì¤¿¥Õ¥¡¥¤¥ë¥Ç¥£¥¹¥¯¥ê¥×¥¿¤ÏÊÝ»ý¤µ¤ì¤ë¡£
198 .SH ÊÖ¤êÃÍ
199 À®¸ù¤¹¤ë¤È¡¢
200 .BR eventfd ()
201 ¤Ï¿·µ¬¤Î eventfd ¥Õ¥¡¥¤¥ë¥Ç¥£¥¹¥¯¥ê¥×¥¿¤òÊÖ¤¹¡£
202 ¥¨¥é¡¼¤Î¾ì¹ç¡¢\-1 ¤òÊÖ¤·¡¢
203 .I errno
204 ¤Ë¥¨¥é¡¼¤ò¼¨¤¹ÃͤòÀßÄꤹ¤ë¡£
205 .SH ¥¨¥é¡¼
206 .TP
207 .B EINVAL
208 .I flags
209 ¤¬Ìµ¸ú¡£
210 Linux 2.6.26 °ÊÁ°¤Ç¤Ï¡¢
211 .I flags
212 ¤¬ 0 °Ê³°¤ÎÃÍ¡£
213 .TP
214 .B EMFILE
215 ¥ª¡¼¥×¥óºÑ¤ß¤Î¥Õ¥¡¥¤¥ë¥Ç¥£¥¹¥¯¥ê¥×¥¿¤Î¿ô¤¬¥×¥í¥»¥¹¤¢¤¿¤ê¤Î¾å¸Â¤Ë
216 㤷¤Æ¤¤¤¿¡£
217 .TP
218 .B ENFILE
219 ¥ª¡¼¥×¥óºÑ¤ß¤Î¥Õ¥¡¥¤¥ëÁí¿ô¤¬¥·¥¹¥Æ¥àÁ´ÂΤξå¸Â¤Ë㤷¤Æ¤¤¤¿¡£
220 .TP
221 .B ENODEV
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 ¥Ç¥Ð¥¤¥¹¤ò¥Þ¥¦¥ó¥È¤Ç¤­¤Ê¤«¤Ã¤¿¡£
228 .TP
229 .B ENOMEM
230 ¿·¤·¤¤ eventfd ¥Õ¥¡¥¤¥ë¥Ç¥£¥¹¥¯¥ê¥×¥¿¤òÀ¸À®¤¹¤ë¤Î¤Ë½½Ê¬¤Ê¥á¥â¥ê¤¬¤Ê¤«¤Ã¤¿¡£
231 .SH ¥Ð¡¼¥¸¥ç¥ó
232 .BR eventfd ()
233 ¤Ï¥«¡¼¥Í¥ë 2.6.22 °Ê¹ß¤Î Linux ¤ÇÍøÍѲÄǽ¤Ç¤¢¤ë¡£
234 Àµ¤·¤¯Æ°ºî¤¹¤ë glibc Â¦¤Î¥µ¥Ý¡¼¥È¤Ï¥Ð¡¼¥¸¥ç¥ó 2.8 °Ê¹ß¤ÇÄ󶡤µ¤ì¤Æ¤¤¤ë¡£
235 .\" eventfd() is in glibc 2.7, but reportedly does not build
236 .BR eventfd2 ()
237 ¥·¥¹¥Æ¥à¥³¡¼¥ë (¡ÖÃí°Õ¡×»²¾È) ¤Ï
238 ¥«¡¼¥Í¥ë 2.6.27 °Ê¹ß¤Î Linux ¤ÇÍøÍѲÄǽ¤Ç¤¢¤ë¡£
239 ¥Ð¡¼¥¸¥ç¥ó 2.9 °Ê¹ß¤Ç¤Ï¡¢glibc ¤Î
240 .BR eventfd ()
241 ¤Î¥é¥Ã¥Ñ¡¼´Ø¿ô¤Ï¡¢¥«¡¼¥Í¥ë¤¬Âбþ¤·¤Æ¤¤¤ì¤Ð
242 .BR eventfd2 ()
243 ¥·¥¹¥Æ¥à¥³¡¼¥ë¤òÍøÍѤ¹¤ë¡£
244 .SH ½àµò
245 .BR eventfd ()
246 ¤È
247 .BR eventfd2 ()
248 ¤Ï Linux ¸ÇÍ­¤Ç¤¢¤ë¡£
249 .SH Ãí°Õ
250 ¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¤Ï¡¢¥Ñ¥¤¥×¤ò¥¤¥Ù¥ó¥È¤òÄÌÃΤ¹¤ë¤¿¤á¤À¤±¤Ë»ÈÍѤ·¤Æ¤¤¤ë
251 Á´¤Æ¤Î¾ìÌ̤ˤª¤¤¤Æ¡¢¥Ñ¥¤¥×¤ÎÂå¤ï¤ê¤Ë eventfd ¥Õ¥¡¥¤¥ë¥Ç¥£¥¹¥¯¥ê¥×¥¿¤ò
252 »ÈÍѤ¹¤ë¤³¤È¤¬¤Ç¤­¤ë¡£
253 eventfd ¥Õ¥¡¥¤¥ë¥Ç¥£¥¹¥¯¥ê¥×¥¿¤ò»È¤¦Êý¤¬¡¢¥Ñ¥¤¥×¤ò»È¤¦¾ì¹ç¤ËÈæ¤Ù¤Æ
254 ¥«¡¼¥Í¥ë¤Ç¤Î¥ª¡¼¥Ð¥Ø¥Ã¥É¤ÏÈæ¤Ù¤ë¤È¤º¤Ã¤È¾®¤µ¤¯¡¢¥Õ¥¡¥¤¥ë¥Ç¥£¥¹¥¯¥ê¥×¥¿¤â
255 °ì¤Ä¤·¤«É¬ÍפȤ·¤Ê¤¤ (¥Ñ¥¤¥×¤Î¾ì¹ç¤ÏÆó¤ÄɬÍפǤ¢¤ë)¡£
256
257 ¥«¡¼¥Í¥ëÆâ¤Ç»ÈÍѤ¹¤ë¤È¡¢eventfd ¥Õ¥¡¥¤¥ë¥Ç¥£¥¹¥¯¥ê¥×¥¿¤Ï
258 ¥«¡¼¥Í¥ë¶õ´Ö¤È¥æ¡¼¥¶¶õ´Ö¤Î¥Ö¥ê¥Ã¥¸µ¡Ç½¤òÄ󶡤¹¤ë¤³¤È¤¬¤Ç¤­¡¢
259 Î㤨¤Ð KAIO (kernel AIO)
260 .\" ¤ä eventually syslets/threadlets
261 ¤Î¤è¤¦¤Êµ¡Ç½¤¬¡¢¤¢¤ë¥Õ¥¡¥¤¥ë¥Ç¥£¥¹¥¯¥ê¥×¥¿¤Ë²¿¤é¤«¤ÎÁàºî¤¬´°Î»¤·¤¿¤³¤È¤ò
262 ÄÌÃΤ¹¤ë¤³¤È¤¬¤Ç¤­¤ë¡£
263
264 eventfd ¥Õ¥¡¥¤¥ë¥Ç¥£¥¹¥¯¥ê¥×¥¿¤Î½ÅÍפÊÅÀ¤Ï¡¢
265 eventfd ¥Õ¥¡¥¤¥ë¥Ç¥£¥¹¥¯¥ê¥×¥¿¤¬
266 .BR select (2),
267 .BR poll (2),
268 .BR epoll (7)
269 ¤ò»È¤Ã¤Æ¾¤Î¥Õ¥¡¥¤¥ë¥Ç¥£¥¹¥¯¥ê¥×¥¿¤ÈÁ´¤¯Æ±Íͤ˴ƻë¤Ç¤­¤ëÅÀ¤Ç¤¢¤ë¡£
270 ¤³¤Î¤³¤È¤Ï¡¢¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¤Ï¡Ö½¾Íè¤Î (traditional)¡× ¥Õ¥¡¥¤¥ë¤Î¾õÂÖÊѲ½¤È
271 eventfd ¥¤¥ó¥¿¥Õ¥§¡¼¥¹¤ò¥µ¥Ý¡¼¥È¤¹¤ë¾¤Î¥«¡¼¥Í¥ëµ¡¹½¤Î¾õÂÖÊѲ½¤òƱ»þ¤Ë´Æ»ë
272 ¤Ç¤­¤ë¤³¤È¤ò°ÕÌ£¤¹¤ë
273 .RB ( eventfd ()
274 ¥¤¥ó¥¿¥Õ¥§¡¼¥¹¤¬¤Ê¤¤»þ¤Ë¤Ï¡¢¤³¤ì¤é¤Î¥«¡¼¥Í¥ëµ¡¹½¤Ï
275 .BR select (2),
276 .BR poll (2),
277 .BR epoll (7)
278 ·Ðͳ¤Ç¿½Å¤¹¤ë¤³¤È¤Ï¤Ç¤­¤Ê¤«¤Ã¤¿)¡£
279 .SS ²¼Áؤˤ¢¤ë Linux ¤Î¥·¥¹¥Æ¥à¥³¡¼¥ë
280 ²¼Áؤˤ¢¤ë Linux ¥·¥¹¥Æ¥à¥³¡¼¥ë¤ÏÆó¼ïÎढ¤ê¡¢
281 .BR eventfd ()
282 ¤È¡¢¤â¤Ã¤È¿·¤·¤¤
283 .BR eventfd2 ()
284 ¤Ç¤¢¤ë¡£
285 .BR eventfd ()
286 ¤Ï
287 .I flags
288 °ú¤­¿ô¤ò¼ÂÁõ¤·¤Æ¤¤¤Ê¤¤¡£
289 .BR eventfd2 ()
290 ¤Ç¤Ï¾åµ­¤ÎÃͤÎ
291 .I flags
292 ¤¬¼ÂÁõ¤µ¤ì¤Æ¤¤¤ë¡£
293 glibc ¤Î¥é¥Ã¥Ñ¡¼´Ø¿ô¤Ï¡¢
294 .BR eventfd2 ()
295 ¤¬ÍøÍѲÄǽ¤Ç¤¢¤ì¤Ð¡¢¤³¤ì¤ò»ÈÍѤ¹¤ë¡£
296 .SS glibc ¤ÎÄɲõ¡Ç½
297 GNU C ¥é¥¤¥Ö¥é¥ê¤Ï¡¢eventfd ¥Õ¥¡¥¤¥ë¥Ç¥£¥¹¥¯¥ê¥×¥¿¤ÎÆɤ߽Ф·¤È½ñ¤­¹þ¤ß¤Ë
298 ¤ò´Ø¤¹¤ë¾ÜºÙ¤Î¤¤¤¯¤Ä¤«Ãê¾Ý²½¤¹¤ë¤¿¤á¤Ë¡¢°ì¤Ä¤Î·¿¤È¡¢Æó¤Ä¤Î´Ø¿ô¤òÄɲäÇ
299 ÄêµÁ¤·¤Æ¤¤¤ë¡£
300 .in +4n
301 .nf
302
303 typedef uint64_t eventfd_t;
304
305 int eventfd_read(int fd, eventfd_t *value);
306 int eventfd_write(int fd, eventfd_t value);
307 .fi
308 .in
309
310 ¤³¤ì¤é¤Î´Ø¿ô¤Ï¡¢eventfd ¥Õ¥¡¥¤¥ë¥Ç¥£¥¹¥¯¥ê¥×¥¿¤ËÂФ¹¤ëÆɤ߽Ф·¤È
311 ½ñ¤­¹þ¤ß¤ÎÁàºî¤ò¼Â¹Ô¤·¡¢Àµ¤·¤¤¥Ð¥¤¥È¿ô¤¬Å¾Á÷¤µ¤ì¤¿¾ì¹ç¤Ë¤Ï
312 0 ¤òÊÖ¤·¡¢¤½¤¦¤Ç¤Ê¤¤¾ì¹ç¤Ï \-1 ¤òÊÖ¤¹¡£
313 .SH Îã
314 .PP
315 °Ê²¼¤Î¥×¥í¥°¥é¥à¤Ï eventfd ¥Õ¥¡¥¤¥ë¥Ç¥£¥¹¥¯¥ê¥×¥¿¤òÀ¸À®¤·¡¢
316 ¤½¤Î¸å fork ¤ò¼Â¹Ô¤·¤Æ»Ò¥×¥í¥»¥¹¤òÀ¸À®¤¹¤ë¡£
317 ¿Æ¥×¥í¥»¥¹¤¬¾¯¤·¤Î´Ö sleep ¤¹¤ë´Ö¤Ë¡¢»Ò¥×¥í¥»¥¹¤Ï
318 ¥×¥í¥°¥é¥à¤Î¥³¥Þ¥ó¥É¥é¥¤¥ó°ú¤­¿ô¤Ç»ØÄꤵ¤ì¤¿À°¿ô(Îó)¤ò¤½¤ì¤¾¤ì
319 eventfd ¥Õ¥¡¥¤¥ë¥Ç¥£¥¹¥¯¥ê¥×¥¿¤Ë½ñ¤­¹þ¤à¡£
320 ¿Æ¥×¥í¥»¥¹¤Ï sleep ¤ò´°Î»¤¹¤ë¤È eventfd ¥Õ¥¡¥¤¥ë¥Ç¥£¥¹¥¯¥ê¥×¥¿¤«¤é
321 Æɤ߽Ф·¤ò¹Ô¤¦¡£
322
323 °Ê²¼¤Ë¼¨¤¹¥·¥§¥ë¥»¥Ã¥·¥ç¥ó¤Ë¤³¤Î¥×¥í¥°¥é¥à¤Î»È¤¤Êý¤ò¼¨¤¹¡£
324 .in +4n
325 .nf
326
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
334 Parent about to read
335 Parent read 28 (0x1c) from efd
336 .fi
337 .in
338 .SS ¥×¥í¥°¥é¥à¤Î¥½¡¼¥¹
339 \&
340 .nf
341 #include <sys/eventfd.h>
342 #include <unistd.h>
343 #include <stdlib.h>
344 #include <stdio.h>
345 #include <stdint.h>             /* Definition of uint64_t */
346
347 #define handle_error(msg) \\
348     do { perror(msg); exit(EXIT_FAILURE); } while (0)
349
350 int
351 main(int argc, char *argv[])
352 {
353     int efd, j;
354     uint64_t u;
355     ssize_t s;
356
357     if (argc < 2) {
358         fprintf(stderr, "Usage: %s <num>...\\n", argv[0]);
359         exit(EXIT_FAILURE);
360     }
361
362     efd = eventfd(0, 0);
363     if (efd == \-1)
364         handle_error("eventfd");
365
366     switch (fork()) {
367     case 0:
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");
375         }
376         printf("Child completed write loop\\n");
377
378         exit(EXIT_SUCCESS);
379
380     default:
381         sleep(2);
382
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);
389         exit(EXIT_SUCCESS);
390
391     case \-1:
392         handle_error("fork");
393     }
394 }
395 .fi
396 .SH ´ØÏ¢¹àÌÜ
397 .BR futex (2),
398 .BR pipe (2),
399 .BR poll (2),
400 .BR read (2),
401 .BR select (2),
402 .BR signalfd (2),
403 .BR timerfd_create (2),
404 .BR write (2),
405 .BR epoll (7),
406 .BR sem_overview (7)