OSDN Git Service

LDP: Update original to LDP v3.76
[linuxjm/LDP_man-pages.git] / original / man2 / epoll_ctl.2
1 .\"  Copyright (C) 2003  Davide Libenzi
2 .\"  Davide Libenzi <davidel@xmailserver.org>
3 .\"
4 .\" %%%LICENSE_START(GPLv2+_SW_3_PARA)
5 .\"  This program is free software; you can redistribute it and/or modify
6 .\"  it under the terms of the GNU General Public License as published by
7 .\"  the Free Software Foundation; either version 2 of the License, or
8 .\"  (at your option) any later version.
9 .\"
10 .\"  This program is distributed in the hope that it will be useful,
11 .\"  but WITHOUT ANY WARRANTY; without even the implied warranty of
12 .\"  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13 .\"  GNU General Public License for more details.
14 .\"
15 .\" You should have received a copy of the GNU General Public
16 .\" License along with this manual; if not, see
17 .\" <http://www.gnu.org/licenses/>.
18 .\" %%%LICENSE_END
19 .\"
20 .TH EPOLL_CTL 2 2014-12-31 "Linux" "Linux Programmer's Manual"
21 .SH NAME
22 epoll_ctl \- control interface for an epoll descriptor
23 .SH SYNOPSIS
24 .B #include <sys/epoll.h>
25 .sp
26 .BI "int epoll_ctl(int " epfd ", int " op ", int " fd \
27 ", struct epoll_event *" event );
28 .SH DESCRIPTION
29 This system call performs control operations on the
30 .BR epoll (7)
31 instance
32 referred to by the file descriptor
33 .IR epfd .
34 It requests that the operation
35 .I op
36 be performed for the target file descriptor,
37 .IR fd .
38
39 Valid values for the
40 .I op
41 argument are:
42 .TP
43 .B EPOLL_CTL_ADD
44 Register the target file descriptor
45 .I fd
46 on the
47 .B epoll
48 instance referred to by the file descriptor
49 .I epfd
50 and associate the event
51 .I event
52 with the internal file linked to
53 .IR fd .
54 .TP
55 .B EPOLL_CTL_MOD
56 Change the event
57 .I event
58 associated with the target file descriptor
59 .IR fd .
60 .TP
61 .B EPOLL_CTL_DEL
62 Remove (deregister) the target file descriptor
63 .I fd
64 from the
65 .B epoll
66 instance referred to by
67 .IR epfd .
68 The
69 .I event
70 is ignored and can be NULL (but see BUGS below).
71 .PP
72 The
73 .I event
74 argument describes the object linked to the file descriptor
75 .IR fd .
76 The
77 .I struct epoll_event
78 is defined as:
79 .sp
80 .in +4n
81 .nf
82 typedef union epoll_data {
83     void        *ptr;
84     int          fd;
85     uint32_t     u32;
86     uint64_t     u64;
87 } epoll_data_t;
88
89 struct epoll_event {
90     uint32_t     events;      /* Epoll events */
91     epoll_data_t data;        /* User data variable */
92 };
93 .fi
94 .in
95
96 The
97 .I events
98 member is a bit set composed using the following available event
99 types:
100 .TP
101 .B EPOLLIN
102 The associated file is available for
103 .BR read (2)
104 operations.
105 .TP
106 .B EPOLLOUT
107 The associated file is available for
108 .BR write (2)
109 operations.
110 .TP
111 .BR EPOLLRDHUP " (since Linux 2.6.17)"
112 Stream socket peer closed connection,
113 or shut down writing half of connection.
114 (This flag is especially useful for writing simple code to detect
115 peer shutdown when using Edge Triggered monitoring.)
116 .TP
117 .B EPOLLPRI
118 There is urgent data available for
119 .BR read (2)
120 operations.
121 .TP
122 .B EPOLLERR
123 Error condition happened on the associated file descriptor.
124 .BR epoll_wait (2)
125 will always wait for this event; it is not necessary to set it in
126 .IR events .
127 .TP
128 .B EPOLLHUP
129 Hang up happened on the associated file descriptor.
130 .BR epoll_wait (2)
131 will always wait for this event; it is not necessary to set it in
132 .IR events .
133 .TP
134 .B EPOLLET
135 Sets the Edge Triggered behavior for the associated file descriptor.
136 The default behavior for
137 .B epoll
138 is Level Triggered.
139 See
140 .BR epoll (7)
141 for more detailed information about Edge and Level Triggered event
142 distribution architectures.
143 .TP
144 .BR EPOLLONESHOT " (since Linux 2.6.2)"
145 Sets the one-shot behavior for the associated file descriptor.
146 This means that after an event is pulled out with
147 .BR epoll_wait (2)
148 the associated file descriptor is internally disabled and no other events
149 will be reported by the
150 .B epoll
151 interface.
152 The user must call
153 .BR epoll_ctl ()
154 with
155 .B EPOLL_CTL_MOD
156 to rearm the file descriptor with a new event mask.
157 .TP
158 .BR EPOLLWAKEUP " (since Linux 3.5)"
159 .\" commit 4d7e30d98939a0340022ccd49325a3d70f7e0238
160 If
161 .B EPOLLONESHOT
162 and
163 .B EPOLLET
164 are clear and the process has the
165 .B CAP_BLOCK_SUSPEND
166 capability,
167 ensure that the system does not enter "suspend" or
168 "hibernate" while this event is pending or being processed.
169 The event is considered as being "processed" from the time
170 when it is returned by a call to
171 .BR epoll_wait (2)
172 until the next call to
173 .BR epoll_wait (2)
174 on the same
175 .BR epoll (7)
176 file descriptor,
177 the closure of that file descriptor,
178 the removal of the event file descriptor with
179 .BR EPOLL_CTL_DEL ,
180 or the clearing of
181 .B EPOLLWAKEUP
182 for the event file descriptor with
183 .BR EPOLL_CTL_MOD .
184 See also BUGS.
185 .SH RETURN VALUE
186 When successful,
187 .BR epoll_ctl ()
188 returns zero.
189 When an error occurs,
190 .BR epoll_ctl ()
191 returns \-1 and
192 .I errno
193 is set appropriately.
194 .SH ERRORS
195 .TP
196 .B EBADF
197 .I epfd
198 or
199 .I fd
200 is not a valid file descriptor.
201 .TP
202 .B EEXIST
203 .I op
204 was
205 .BR EPOLL_CTL_ADD ,
206 and the supplied file descriptor
207 .I fd
208 is already registered with this epoll instance.
209 .TP
210 .B EINVAL
211 .I epfd
212 is not an
213 .B epoll
214 file descriptor,
215 or
216 .I fd
217 is the same as
218 .IR epfd ,
219 or the requested operation
220 .I op
221 is not supported by this interface.
222 .TP
223 .B ENOENT
224 .I op
225 was
226 .B EPOLL_CTL_MOD
227 or
228 .BR EPOLL_CTL_DEL ,
229 and
230 .I fd
231 is not registered with this epoll instance.
232 .TP
233 .B ENOMEM
234 There was insufficient memory to handle the requested
235 .I op
236 control operation.
237 .TP
238 .B ENOSPC
239 The limit imposed by
240 .I /proc/sys/fs/epoll/max_user_watches
241 was encountered while trying to register
242 .RB ( EPOLL_CTL_ADD )
243 a new file descriptor on an epoll instance.
244 See
245 .BR epoll (7)
246 for further details.
247 .TP
248 .B EPERM
249 The target file
250 .I fd
251 does not support
252 .BR epoll .
253 This error can occur if
254 .I fd
255 refers to, for example, a regular file or a directory.
256 .SH VERSIONS
257 .BR epoll_ctl ()
258 was added to the kernel in version 2.6.
259 .\" To be precise: kernel 2.5.44.
260 .\" The interface should be finalized by Linux kernel 2.5.66.
261 .SH CONFORMING TO
262 .BR epoll_ctl ()
263 is Linux-specific.
264 Library support is provided in glibc starting with version 2.3.2.
265 .SH NOTES
266 The
267 .B epoll
268 interface supports all file descriptors that support
269 .BR poll (2).
270 .SH BUGS
271 In kernel versions before 2.6.9, the
272 .B EPOLL_CTL_DEL
273 operation required a non-null pointer in
274 .IR event ,
275 even though this argument is ignored.
276 Since Linux 2.6.9,
277 .I event
278 can be specified as NULL
279 when using
280 .BR EPOLL_CTL_DEL .
281 Applications that need to be portable to kernels before 2.6.9
282 should specify a non-null pointer in
283 .IR event .
284
285 If
286 .B EPOLLWAKEUP
287 is specified in
288 .IR flags ,
289 but the caller does not have the
290 .BR CAP_BLOCK_SUSPEND
291 capability, then the
292 .B EPOLLWAKEUP
293 flag is
294 .IR "silently ignored" .
295 This unfortunate behavior is necessary because no validity
296 checks were performed on the
297 .IR flags
298 argument in the original implementation, and the addition of the
299 .B EPOLLWAKEUP
300 with a check that caused the call to fail if the caller did not have the
301 .B CAP_BLOCK_SUSPEND
302 capability caused a breakage in at least one existing user-space
303 application that happened to randomly (and uselessly) specify this bit.
304 .\" commit a8159414d7e3af7233e7a5a82d1c5d85379bd75c (behavior change)
305 .\" https://lwn.net/Articles/520198/
306 A robust application should therefore double check that it has the
307 .B CAP_BLOCK_SUSPEND
308 capability if attempting to use the
309 .B EPOLLWAKEUP
310 flag.
311 .SH SEE ALSO
312 .BR epoll_create (2),
313 .BR epoll_wait (2),
314 .BR poll (2),
315 .BR epoll (7)
316 .SH COLOPHON
317 This page is part of release 3.76 of the Linux
318 .I man-pages
319 project.
320 A description of the project,
321 information about reporting bugs,
322 and the latest version of this page,
323 can be found at
324 \%http://www.kernel.org/doc/man\-pages/.