]> git.ipfire.org Git - thirdparty/man-pages.git/blame - man2/eventfd.2
access.2, delete_module.2, eventfd.2, fallocate.2, fcntl.2, getrandom.2, init_module...
[thirdparty/man-pages.git] / man2 / eventfd.2
CommitLineData
8b428090
MK
1.\" Copyright (C) 2008 Michael Kerrisk <mtk.manpages@gmail.com>
2.\" starting from a version by Davide Libenzi <davidel@xmailserver.org>
3.\"
f0008367 4.\" %%%LICENSE_START(GPLv2+_SW_3_PARA)
8b428090
MK
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.\"
68fa4398
MK
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/>.
8ff7380d 18.\" %%%LICENSE_END
8b428090 19.\"
c22cb204
MK
20.\" 2008-10-10, mtk: describe eventfd2(), and EFD_NONBLOCK and EFD_CLOEXEC
21.\"
4b8c67d9 22.TH EVENTFD 2 2017-09-15 Linux "Linux Programmer's Manual"
8b428090
MK
23.SH NAME
24eventfd \- create a file descriptor for event notification
25.SH SYNOPSIS
26.B #include <sys/eventfd.h>
68e4db0a 27.PP
8b428090
MK
28.BI "int eventfd(unsigned int " initval ", int " flags );
29.SH DESCRIPTION
30.BR eventfd ()
31creates an "eventfd object" that can be used as
7fac88a9
MK
32an event wait/notify mechanism by user-space applications,
33and by the kernel to notify user-space applications of events.
8b428090
MK
34The object contains an unsigned 64-bit integer
35.RI ( uint64_t )
36counter that is maintained by the kernel.
37This counter is initialized with the value specified in the argument
38.IR initval .
efeece04 39.PP
0986cb57 40The following values may be bitwise ORed in
e64b5482 41.IR flags
a1fa36af 42to change the behavior of
e64b5482 43.BR eventfd ():
e64b5482 44.TP
0986cb57 45.BR EFD_CLOEXEC " (since Linux 2.6.27)"
e64b5482
MK
46Set the close-on-exec
47.RB ( FD_CLOEXEC )
48flag on the new file descriptor.
c5571b61 49See the description of the
e64b5482
MK
50.B O_CLOEXEC
51flag in
52.BR open (2)
53for reasons why this may be useful.
4eb6d333 54.TP
0986cb57 55.BR EFD_NONBLOCK " (since Linux 2.6.27)"
4eb6d333
MK
56Set the
57.BR O_NONBLOCK
58file status flag on the new open file description.
59Using this flag saves extra calls to
60.BR fcntl (2)
61to achieve the same result.
0986cb57
MK
62.TP
63.BR EFD_SEMAPHORE " (since Linux 2.6.30)"
64Provide semaphore-like semantics for reads from the new file descriptor.
65See below.
e64b5482
MK
66.PP
67In Linux up to version 2.6.26, the
8b428090 68.I flags
e64b5482 69argument is unused, and must be specified as zero.
efeece04 70.PP
8b428090
MK
71As its return value,
72.BR eventfd ()
73returns a new file descriptor that can be used to refer to the
74eventfd object.
75The following operations can be performed on the file descriptor:
76.TP
77.BR read (2)
0986cb57
MK
78Each successful
79.BR read (2)
80returns an 8-byte integer.
81A
82.BR read (2)
26cd31fd 83fails with the error
0986cb57
MK
84.B EINVAL
85if the size of the supplied buffer is less than 8 bytes.
86.IP
87The value returned by
88.BR read (2)
88879aeb
MK
89is in host byte order\(emthat is,
90the native byte order for integers on the host machine.
0986cb57
MK
91.IP
92The semantics of
93.BR read (2)
94depend on whether the eventfd counter currently has a nonzero value
95and whether the
96.BR EFD_SEMAPHORE
97flag was specified when creating the eventfd file descriptor:
98.RS
99.IP * 3
100If
101.BR EFD_SEMAPHORE
102was not specified and the eventfd counter has a nonzero value, then a
8b428090
MK
103.BR read (2)
104returns 8 bytes containing that value,
105and the counter's value is reset to zero.
0986cb57
MK
106.IP *
107If
108.BR EFD_SEMAPHORE
109was specified and the eventfd counter has a nonzero value, then a
110.BR read (2)
111returns 8 bytes containing the value 1,
112and the counter's value is decremented by 1.
113.IP *
114If the eventfd counter is zero at the time of the call to
8b428090 115.BR read (2),
0986cb57
MK
116then the call either blocks until the counter becomes nonzero
117(at which time, the
118.BR read (2)
119proceeds as described above)
8b428090
MK
120or fails with the error
121.B EAGAIN
ff40dbb3 122if the file descriptor has been made nonblocking.
0986cb57 123.RE
8b428090
MK
124.TP
125.BR write (2)
126A
127.BR write (2)
128call adds the 8-byte integer value supplied in its
129buffer to the counter.
130The maximum value that may be stored in the counter is the largest
131unsigned 64-bit value minus 1 (i.e., 0xfffffffffffffffe).
132If the addition would cause the counter's value to exceed
133the maximum, then the
134.BR write (2)
135either blocks until a
136.BR read (2)
137is performed on the file descriptor,
138or fails with the error
139.B EAGAIN
ff40dbb3 140if the file descriptor has been made nonblocking.
8b428090
MK
141.IP
142A
143.BR write (2)
26cd31fd 144fails with the error
8b428090
MK
145.B EINVAL
146if the size of the supplied buffer is less than 8 bytes,
147or if an attempt is made to write the value 0xffffffffffffffff.
148.TP
149.BR poll "(2), " select "(2) (and similar)"
150The returned file descriptor supports
151.BR poll (2)
152(and analogously
153.BR epoll (7))
154and
155.BR select (2),
156as follows:
157.RS
158.IP * 3
159The file descriptor is readable
160(the
161.BR select (2)
162.I readfds
163argument; the
164.BR poll (2)
165.B POLLIN
166flag)
167if the counter has a value greater than 0.
168.IP *
169The file descriptor is writable
170(the
171.BR select (2)
172.I writefds
173argument; the
174.BR poll (2)
175.B POLLOUT
176flag)
177if it is possible to write a value of at least "1" without blocking.
178.IP *
20e5fb78
MK
179If an overflow of the counter value was detected,
180then
8b428090 181.BR select (2)
20e5fb78 182indicates the file descriptor as being both readable and writable, and
8b428090 183.BR poll (2)
20e5fb78 184returns a
8b428090 185.B POLLERR
20e5fb78 186event.
8b428090
MK
187As noted above,
188.BR write (2)
189can never overflow the counter.
190However an overflow can occur if 2^64
191eventfd "signal posts" were performed by the KAIO
192subsystem (theoretically possible, but practically unlikely).
193If an overflow has occurred, then
194.BR read (2)
195will return that maximum
196.I uint64_t
197value (i.e., 0xffffffffffffffff).
198.RE
199.IP
200The eventfd file descriptor also supports the other file-descriptor
201multiplexing APIs:
531b15bc 202.BR pselect (2)
8b428090 203and
531b15bc 204.BR ppoll (2).
8b428090
MK
205.TP
206.BR close (2)
207When the file descriptor is no longer required it should be closed.
208When all file descriptors associated with the same eventfd object
209have been closed, the resources for object are freed by the kernel.
210.PP
211A copy of the file descriptor created by
212.BR eventfd ()
213is inherited by the child produced by
214.BR fork (2).
215The duplicate file descriptor is associated with the same
216eventfd object.
217File descriptors created by
218.BR eventfd ()
219are preserved across
d45105d9
AS
220.BR execve (2),
221unless the close-on-exec flag has been set.
47297adb 222.SH RETURN VALUE
8b428090
MK
223On success,
224.BR eventfd ()
225returns a new eventfd file descriptor.
226On error, \-1 is returned and
227.I errno
228is set to indicate the error.
229.SH ERRORS
40725279
MK
230.TP
231.B EINVAL
0986cb57
MK
232An unsupported value was specified in
233.IR flags .
8b428090
MK
234.TP
235.B EMFILE
26c32fab 236The per-process limit on the number of open file descriptors has been reached.
8b428090
MK
237.TP
238.B ENFILE
239The system-wide limit on the total number of open files has been
240reached.
241.TP
242.B ENODEV
243.\" Note from Davide:
244.\" The ENODEV error is basically never going to happen if
245.\" the kernel boots correctly. That error happen only if during
246.\" the kernel initialization, some error occur in the anonymous
247.\" inode source initialization.
248Could not mount (internal) anonymous inode device.
249.TP
250.B ENOMEM
251There was insufficient memory to create a new
252eventfd file descriptor.
253.SH VERSIONS
254.BR eventfd ()
255is available on Linux since kernel 2.6.22.
256Working support is provided in glibc since version 2.8.
257.\" eventfd() is in glibc 2.7, but reportedly does not build
e64b5482
MK
258The
259.BR eventfd2 ()
260system call (see NOTES) is available on Linux since kernel 2.6.27.
66bbce00
MK
261Since version 2.9, the glibc
262.BR eventfd ()
263wrapper will employ the
264.BR eventfd2 ()
265system call, if it is supported by the kernel.
288c1a09
ZL
266.SH ATTRIBUTES
267For an explanation of the terms used in this section, see
268.BR attributes (7).
269.TS
270allbox;
271lb lb lb
272l l l.
273Interface Attribute Value
274T{
275.BR eventfd ()
276T} Thread safety MT-Safe
277.TE
efeece04 278.sp 1
8b428090
MK
279.SH CONFORMING TO
280.BR eventfd ()
e64b5482 281and
2aa3fb2d 282.BR eventfd2 ()
e64b5482 283are Linux-specific.
8b428090
MK
284.SH NOTES
285Applications can use an eventfd file descriptor instead of a pipe (see
286.BR pipe (2))
287in all cases where a pipe is used simply to signal events.
288The kernel overhead of an eventfd file descriptor
289is much lower than that of a pipe,
290and only one file descriptor is
291required (versus the two required for a pipe).
efeece04 292.PP
8b428090 293When used in the kernel, an eventfd
7fac88a9 294file descriptor can provide a bridge from kernel to user space, allowing,
8b428090
MK
295for example, functionalities like KAIO (kernel AIO)
296.\" or eventually syslets/threadlets
297to signal to a file descriptor that some operation is complete.
efeece04 298.PP
8b428090
MK
299A key point about an eventfd file descriptor is that it can be
300monitored just like any other file descriptor using
301.BR select (2),
302.BR poll (2),
303or
304.BR epoll (7).
305This means that an application can simultaneously monitor the
306readiness of "traditional" files and the readiness of other
307kernel mechanisms that support the eventfd interface.
308(Without the
309.BR eventfd ()
310interface, these mechanisms could not be multiplexed via
311.BR select (2),
312.BR poll (2),
313or
314.BR epoll (7).)
efeece04 315.PP
9764a9ff
MK
316The current value of an eventfd counter can be viewed
317via the entry for the corresponding file descriptor in the process's
318.IR /proc/[pid]/fdinfo
319directory.
320See
321.BR proc (5)
322for further details.
323.\"
0722a578 324.SS C library/kernel differences
e64b5482
MK
325There are two underlying Linux system calls:
326.BR eventfd ()
327and the more recent
328.BR eventfd2 ().
329The former system call does not implement a
330.I flags
331argument.
332The latter system call implements the
333.I flags
334values described above.
e64b5482
MK
335The glibc wrapper function will use
336.BR eventfd2 ()
337where it is available.
8b428090
MK
338.SS Additional glibc features
339The GNU C library defines an additional type,
340and two functions that attempt to abstract some of the details of
341reading and writing on an eventfd file descriptor:
0ffeaeae 342.PP
8b428090 343.in +4n
0ffeaeae 344.EX
8b428090
MK
345typedef uint64_t eventfd_t;
346
ffaecbc1
MK
347int eventfd_read(int fd, eventfd_t *value);
348int eventfd_write(int fd, eventfd_t value);
0ffeaeae 349.EE
8b428090 350.in
efeece04 351.PP
8b428090
MK
352The functions perform the read and write operations on an
353eventfd file descriptor,
354returning 0 if the correct number of bytes was transferred,
355or \-1 otherwise.
356.SH EXAMPLE
357.PP
358The following program creates an eventfd file descriptor
359and then forks to create a child process.
360While the parent briefly sleeps,
361the child writes each of the integers supplied in the program's
362command-line arguments to the eventfd file descriptor.
363When the parent has finished sleeping,
364it reads from the eventfd file descriptor.
efeece04 365.PP
8b428090 366The following shell session shows a sample run of the program:
0ffeaeae 367.PP
8b428090 368.in +4n
0ffeaeae 369.EX
b43a3b30 370.RB "$" " ./a.out 1 2 4 7 14"
8b428090
MK
371Child writing 1 to efd
372Child writing 2 to efd
373Child writing 4 to efd
374Child writing 7 to efd
375Child writing 14 to efd
376Child completed write loop
377Parent about to read
378Parent read 28 (0x1c) from efd
0ffeaeae 379.EE
1c32ee47 380.in
9c330504 381.SS Program source
d84d0300 382\&
e7d0bb47 383.EX
8b428090
MK
384#include <sys/eventfd.h>
385#include <unistd.h>
386#include <stdlib.h>
387#include <stdio.h>
388#include <stdint.h> /* Definition of uint64_t */
389
390#define handle_error(msg) \\
391 do { perror(msg); exit(EXIT_FAILURE); } while (0)
392
393int
394main(int argc, char *argv[])
395{
396 int efd, j;
397 uint64_t u;
398 ssize_t s;
399
400 if (argc < 2) {
401 fprintf(stderr, "Usage: %s <num>...\\n", argv[0]);
402 exit(EXIT_FAILURE);
403 }
404
405 efd = eventfd(0, 0);
406 if (efd == \-1)
407 handle_error("eventfd");
408
409 switch (fork()) {
410 case 0:
411 for (j = 1; j < argc; j++) {
412 printf("Child writing %s to efd\\n", argv[j]);
413 u = strtoull(argv[j], NULL, 0);
414 /* strtoull() allows various bases */
415 s = write(efd, &u, sizeof(uint64_t));
416 if (s != sizeof(uint64_t))
417 handle_error("write");
418 }
419 printf("Child completed write loop\\n");
420
421 exit(EXIT_SUCCESS);
422
423 default:
424 sleep(2);
425
426 printf("Parent about to read\\n");
427 s = read(efd, &u, sizeof(uint64_t));
428 if (s != sizeof(uint64_t))
429 handle_error("read");
430 printf("Parent read %llu (0x%llx) from efd\\n",
431 (unsigned long long) u, (unsigned long long) u);
432 exit(EXIT_SUCCESS);
433
434 case \-1:
435 handle_error("fork");
436 }
437}
e7d0bb47 438.EE
47297adb 439.SH SEE ALSO
8b428090
MK
440.BR futex (2),
441.BR pipe (2),
442.BR poll (2),
443.BR read (2),
444.BR select (2),
445.BR signalfd (2),
446.BR timerfd_create (2),
447.BR write (2),
448.BR epoll (7),
449.BR sem_overview (7)