]> git.ipfire.org Git - thirdparty/man-pages.git/blob - man2/epoll_ctl.2
epoll_ctl.2: Minor tweaks to Neil Brown's patch
[thirdparty/man-pages.git] / 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 2012-04-15 "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 .SH RETURN VALUE
178 When successful,
179 .BR epoll_ctl ()
180 returns zero.
181 When an error occurs,
182 .BR epoll_ctl ()
183 returns \-1 and
184 .I errno
185 is set appropriately.
186 .SH ERRORS
187 .TP
188 .B EBADF
189 .I epfd
190 or
191 .I fd
192 is not a valid file descriptor.
193 .TP
194 .B EEXIST
195 .I op
196 was
197 .BR EPOLL_CTL_ADD ,
198 and the supplied file descriptor
199 .I fd
200 is already registered with this epoll instance.
201 .TP
202 .B EINVAL
203 .I epfd
204 is not an
205 .B epoll
206 file descriptor,
207 or
208 .I fd
209 is the same as
210 .IR epfd ,
211 or the requested operation
212 .I op
213 is not supported by this interface.
214 .TP
215 .B ENOENT
216 .I op
217 was
218 .B EPOLL_CTL_MOD
219 or
220 .BR EPOLL_CTL_DEL ,
221 and
222 .I fd
223 is not registered with this epoll instance.
224 .TP
225 .B ENOMEM
226 There was insufficient memory to handle the requested
227 .I op
228 control operation.
229 .TP
230 .B ENOSPC
231 The limit imposed by
232 .I /proc/sys/fs/epoll/max_user_watches
233 was encountered while trying to register
234 .RB ( EPOLL_CTL_ADD )
235 a new file descriptor on an epoll instance.
236 See
237 .BR epoll (7)
238 for further details.
239 .TP
240 .B EPERM
241 The target file
242 .I fd
243 does not support
244 .BR epoll .
245 .SH VERSIONS
246 .BR epoll_ctl ()
247 was added to the kernel in version 2.6.
248 .\" To be precise: kernel 2.5.44.
249 .\" The interface should be finalized by Linux kernel 2.5.66.
250 .SH CONFORMING TO
251 .BR epoll_ctl ()
252 is Linux-specific.
253 Library support is provided in glibc starting with version 2.3.2.
254 .SH NOTES
255 The
256 .B epoll
257 interface supports all file descriptors that support
258 .BR poll (2).
259 .SH BUGS
260 In kernel versions before 2.6.9, the
261 .B EPOLL_CTL_DEL
262 operation required a non-null pointer in
263 .IR event ,
264 even though this argument is ignored.
265 Since Linux 2.6.9,
266 .I event
267 can be specified as NULL
268 when using
269 .BR EPOLL_CTL_DEL .
270 Applications that need to be portable to kernels before 2.6.9
271 should specify a non-null pointer in
272 .IR event .
273 .SH SEE ALSO
274 .BR epoll_create (2),
275 .BR epoll_wait (2),
276 .BR poll (2),
277 .BR epoll (7)