1 .\" Copyright (C) 2003 Davide Libenzi
2 .\" Davide Libenzi <davidel@xmailserver.org>
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.
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.
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/>.
20 .TH EPOLL_CTL 2 2016-10-08 "Linux" "Linux Programmer's Manual"
22 epoll_ctl \- control interface for an epoll file descriptor
24 .B #include <sys/epoll.h>
26 .BI "int epoll_ctl(int " epfd ", int " op ", int " fd \
27 ", struct epoll_event *" event );
29 This system call performs control operations on the
32 referred to by the file descriptor
34 It requests that the operation
36 be performed for the target file descriptor,
44 Register the target file descriptor
48 instance referred to by the file descriptor
50 and associate the event
52 with the internal file linked to
58 associated with the target file descriptor
62 Remove (deregister) the target file descriptor
66 instance referred to by
70 is ignored and can be NULL (but see BUGS below).
74 argument describes the object linked to the file descriptor
82 typedef union epoll_data {
90 uint32_t events; /* Epoll events */
91 epoll_data_t data; /* User data variable */
98 member is a bit mask composed using the following available event
102 The associated file is available for
107 The associated file is available for
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.)
118 There is an exceptional condition on the file descriptor.
119 See the discussion of
125 Error condition happened on the associated file descriptor.
126 This event is also reported for the write end of a pipe when the read end
129 will always report for this event; it is not necessary to set it in
133 Hang up happened on the associated file descriptor.
135 will always wait for this event; it is not necessary to set it in
137 Note that when reading from a channel such as a pipe or a stream socket,
138 this event merely indicates that the peer closed its end of the channel.
139 Subsequent reads from the channel will return 0 (end of file)
140 only after all outstanding data in the channel has been consumed.
143 Sets the Edge Triggered behavior for the associated file descriptor.
144 The default behavior for
149 for more detailed information about Edge and Level Triggered event
150 distribution architectures.
152 .BR EPOLLONESHOT " (since Linux 2.6.2)"
153 Sets the one-shot behavior for the associated file descriptor.
154 This means that after an event is pulled out with
156 the associated file descriptor is internally disabled and no other events
157 will be reported by the
164 to rearm the file descriptor with a new event mask.
166 .BR EPOLLWAKEUP " (since Linux 3.5)"
167 .\" commit 4d7e30d98939a0340022ccd49325a3d70f7e0238
172 are clear and the process has the
175 ensure that the system does not enter "suspend" or
176 "hibernate" while this event is pending or being processed.
177 The event is considered as being "processed" from the time
178 when it is returned by a call to
180 until the next call to
185 the closure of that file descriptor,
186 the removal of the event file descriptor with
190 for the event file descriptor with
194 .BR EPOLLEXCLUSIVE " (since Linux 4.5)"
195 Sets an exclusive wakeup mode for the epoll file descriptor that is being
196 attached to the target file descriptor,
198 When a wakeup event occurs and multiple epoll file descriptors
199 are attached to the same target file using
201 one or more of the epoll file descriptors will receive an event with
203 The default in this scenario (when
205 is not set) is for all epoll file descriptors to receive an event.
207 is thus useful for avoiding thundering herd problems in certain scenarios.
209 If the same file descriptor is in multiple epoll instances,
212 flag, and others without, then events will be provided to all epoll
213 instances that did not specify
215 and at least one of the epoll instances that did specify
218 The following values may be specified in conjunction with
228 can also be specified, but this is not required:
229 as usual, these events are always reported if they occur,
230 regardless of whether they are specified in
232 Attempts to specify other values in
236 may be used only in an
238 operation; attempts to employ it with
249 pair yields an error.
256 and specifies the target file descriptor
258 as an epoll instance will likewise fail.
259 The error in all of these cases is
265 When an error occurs,
269 is set appropriately.
276 is not a valid file descriptor.
282 and the supplied file descriptor
284 is already registered with this epoll instance.
295 or the requested operation
297 is not supported by this interface.
300 An invalid event type was specified along with
320 flag has previously been applied to this
330 refers to an epoll instance.
334 refers to an epoll instance and this
336 operation would result in a circular loop of epoll instances
337 monitoring one another.
347 is not registered with this epoll instance.
350 There was insufficient memory to handle the requested
356 .I /proc/sys/fs/epoll/max_user_watches
357 was encountered while trying to register
358 .RB ( EPOLL_CTL_ADD )
359 a new file descriptor on an epoll instance.
369 This error can occur if
371 refers to, for example, a regular file or a directory.
374 was added to the kernel in version 2.6.
375 .\" To be precise: kernel 2.5.44.
376 .\" The interface should be finalized by Linux kernel 2.5.66.
380 Library support is provided in glibc starting with version 2.3.2.
384 interface supports all file descriptors that support
387 In kernel versions before 2.6.9, the
389 operation required a non-null pointer in
391 even though this argument is ignored.
394 can be specified as NULL
397 Applications that need to be portable to kernels before 2.6.9
398 should specify a non-null pointer in
405 but the caller does not have the
406 .BR CAP_BLOCK_SUSPEND
410 .IR "silently ignored" .
411 This unfortunate behavior is necessary because no validity
412 checks were performed on the
414 argument in the original implementation, and the addition of the
416 with a check that caused the call to fail if the caller did not have the
418 capability caused a breakage in at least one existing user-space
419 application that happened to randomly (and uselessly) specify this bit.
420 .\" commit a8159414d7e3af7233e7a5a82d1c5d85379bd75c (behavior change)
421 .\" https://lwn.net/Articles/520198/
422 A robust application should therefore double check that it has the
424 capability if attempting to use the
428 .BR epoll_create (2),