xref: /illumos-gate/usr/src/man/man3c/eventfd.3c (revision bbf215553c7233fbab8a0afdf1fac74c44781867)
11767006bSBryan Cantrill.\"
21767006bSBryan Cantrill.\" This file and its contents are supplied under the terms of the
31767006bSBryan Cantrill.\" Common Development and Distribution License ("CDDL"), version 1.0.
41767006bSBryan Cantrill.\" You may only use this file in accordance with the terms of version
51767006bSBryan Cantrill.\" 1.0 of the CDDL.
61767006bSBryan Cantrill.\"
71767006bSBryan Cantrill.\" A full copy of the text of the CDDL should have accompanied this
81767006bSBryan Cantrill.\" source.  A copy of the CDDL is also available via the Internet at
91767006bSBryan Cantrill.\" http://www.illumos.org/license/CDDL.
101767006bSBryan Cantrill.\"
111767006bSBryan Cantrill.\"
121767006bSBryan Cantrill.\" Copyright (c) 2014, Joyent, Inc. All Rights Reserved.
1394733b36SAndy Fiddaman.\" Copyright 2021 OmniOS Community Edition (OmniOSce) Association.
141767006bSBryan Cantrill.\"
1594733b36SAndy Fiddaman.Dd August 10, 2021
161767006bSBryan Cantrill.Dt EVENTFD 3C
171767006bSBryan Cantrill.Os
181767006bSBryan Cantrill.Sh NAME
1994733b36SAndy Fiddaman.Nm eventfd ,
2094733b36SAndy Fiddaman.Nm eventfd_read ,
2194733b36SAndy Fiddaman.Nm eventfd_write
221767006bSBryan Cantrill.Nd create a file descriptor for event notification
231767006bSBryan Cantrill.Sh SYNOPSIS
241767006bSBryan Cantrill.In sys/eventfd.h
251767006bSBryan Cantrill.Ft int
261767006bSBryan Cantrill.Fo eventfd
271767006bSBryan Cantrill.Fa "unsigned int initval"
281767006bSBryan Cantrill.Fa "int flags"
291767006bSBryan Cantrill.Fc
3094733b36SAndy Fiddaman.Ft int
3194733b36SAndy Fiddaman.Fo eventfd_read
3294733b36SAndy Fiddaman.Fa "int fd"
3394733b36SAndy Fiddaman.Fa "eventfd_t *valp"
3494733b36SAndy Fiddaman.Fc
3594733b36SAndy Fiddaman.Ft int
3694733b36SAndy Fiddaman.Fo eventfd_write
3794733b36SAndy Fiddaman.Fa "int fd"
3894733b36SAndy Fiddaman.Fa "eventfd_t val"
3994733b36SAndy Fiddaman.Fc
401767006bSBryan Cantrill.Sh DESCRIPTION
411767006bSBryan CantrillThe
421767006bSBryan Cantrill.Fn eventfd
431767006bSBryan Cantrillfunction creates an
44*bbf21555SRichard Lowe.Xr eventfd 7
4572d3dbb9SYuri Pankovinstance that has an associated 64-bit unsigned counter.
4672d3dbb9SYuri PankovIt returns a file descriptor that can be operated upon via
471767006bSBryan Cantrill.Xr read 2 ,
481767006bSBryan Cantrill.Xr write 2
4994733b36SAndy Fiddamanand the facilities that notify of file descriptor activity
5094733b36SAndy Fiddaman.Po e.g. ,
511767006bSBryan Cantrill.Xr poll 2 ,
521767006bSBryan Cantrill.Xr port_get 3C ,
5394733b36SAndy Fiddaman.Xr epoll_wait 3C Ns
5494733b36SAndy Fiddaman.Pc .
551767006bSBryan CantrillTo dispose of the instance,
561767006bSBryan Cantrill.Xr close 2
571767006bSBryan Cantrillshould be called on the file descriptor.
581767006bSBryan Cantrill.Pp
591767006bSBryan CantrillThe
601767006bSBryan Cantrill.Fa initval
611767006bSBryan Cantrillargument specifies the initial value of the 64-bit counter associated with the
6272d3dbb9SYuri Pankovinstance.
6394733b36SAndy Fiddaman.Po
6494733b36SAndy FiddamanNote that this limits the initial value to be a 32-bit quantity despite the
6594733b36SAndy Fiddamanfact that the underlying counter is 64-bit
6694733b36SAndy Fiddaman.Pc .
671767006bSBryan Cantrill.Pp
6894733b36SAndy FiddamanThe
6994733b36SAndy Fiddaman.Fa flags
7094733b36SAndy Fiddamanargument specifies additional parameters for the instance, and can have any of
7194733b36SAndy Fiddamanthe following values:
7294733b36SAndy Fiddaman.Bl -tag -width Ds
7394733b36SAndy Fiddaman.It Dv EFD_CLOEXEC
741767006bSBryan CantrillInstance will be closed upon an
751767006bSBryan Cantrill.Xr exec 2 ;
761767006bSBryan Cantrillsee
771767006bSBryan Cantrill.Xr open 2 Ns 's
781767006bSBryan Cantrilldescription of
7994733b36SAndy Fiddaman.Dv O_CLOEXEC .
8094733b36SAndy Fiddaman.It Dv EFD_NONBLOCK
8172d3dbb9SYuri PankovInstance will be set to be non-blocking.
8272d3dbb9SYuri PankovA
831767006bSBryan Cantrill.Xr read 2
841767006bSBryan Cantrillon an
8594733b36SAndy Fiddaman.Nm eventfd
861767006bSBryan Cantrillinstance that has been initialized with
8794733b36SAndy Fiddaman.Dv EFD_NONBLOCK
881767006bSBryan Cantrillwill return
8994733b36SAndy Fiddaman.Er EAGAIN
901767006bSBryan Cantrillin lieu of blocking if the count associated with the instance is zero.
9194733b36SAndy Fiddaman.It Dv EFD_SEMAPHORE
921767006bSBryan CantrillProvide counting semaphore semantics whereby a
931767006bSBryan Cantrill.Xr read 2
941767006bSBryan Cantrillwill atomically decrement rather than atomically clear the count when it
9572d3dbb9SYuri Pankovbecomes non-zero.
9672d3dbb9SYuri PankovSee below for details on
971767006bSBryan Cantrill.Xr read 2
981767006bSBryan Cantrillsemantics.
991767006bSBryan Cantrill.El
1001767006bSBryan Cantrill.Pp
1011767006bSBryan CantrillThe following operations can be performed upon an
10294733b36SAndy Fiddaman.Nm eventfd
1031767006bSBryan Cantrillinstance:
10494733b36SAndy Fiddaman.Bl -tag -width Ds
10594733b36SAndy Fiddaman.It Xr read 2
1061767006bSBryan CantrillAtomically reads and modifies the value of the 64-bit counter associated
10772d3dbb9SYuri Pankovwith the instance.
10872d3dbb9SYuri PankovThe precise semantics of
1091767006bSBryan Cantrill.Xr read 2
1101767006bSBryan Cantrilldepend on the disposition of
11194733b36SAndy Fiddaman.Dv EFD_SEMAPHORE
1121767006bSBryan Cantrillwith
1131767006bSBryan Cantrillrespect to the instance: if
11494733b36SAndy Fiddaman.Dv EFD_SEMAPHORE
1151767006bSBryan Cantrillwas set when the instance was created,
1161767006bSBryan Cantrill.Xr read 2
1171767006bSBryan Cantrillwill
1181767006bSBryan Cantrill.Em atomically decrement
11994733b36SAndy Fiddamanthe counter if
12094733b36SAndy Fiddaman.Pq and when
12194733b36SAndy Fiddamanit is non-zero, copying the value 1 to the eight byte buffer passed to the
12294733b36SAndy Fiddamansystem call; if
12394733b36SAndy Fiddaman.Dv EFD_SEMAPHORE
1241767006bSBryan Cantrillwas not set,
1251767006bSBryan Cantrill.Xr read 2
1261767006bSBryan Cantrillwill
1271767006bSBryan Cantrill.Em atomically clear
12894733b36SAndy Fiddamanthe counter if
12994733b36SAndy Fiddaman.Pq and when
13094733b36SAndy Fiddamanit is non-zero, copying the former value of the counter to the eight byte
13194733b36SAndy Fiddamanbuffer passed to the system call.
13272d3dbb9SYuri PankovIn either case,
1331767006bSBryan Cantrill.Xr read 2
1341767006bSBryan Cantrillwill block if the counter is
13594733b36SAndy Fiddamanzero
13694733b36SAndy Fiddaman.Po or return
13794733b36SAndy Fiddaman.Er EAGAIN
1381767006bSBryan Cantrillif the instance was created with
13994733b36SAndy Fiddaman.Dv EFD_NONBLOCK
14094733b36SAndy Fiddaman.Pc .
1411767006bSBryan CantrillIf the buffer specified to
1421767006bSBryan Cantrill.Xr read 2
1431767006bSBryan Cantrillis less than
1441767006bSBryan Cantrilleight bytes in length,
14594733b36SAndy Fiddaman.Er EINVAL
1461767006bSBryan Cantrillwill be returned.
14794733b36SAndy Fiddaman.It Xr write 2
1481767006bSBryan CantrillAtomically adds the 64-bit value pointed to by the buffer to the 64-bit
14972d3dbb9SYuri Pankovcounter associated with the instance.
15072d3dbb9SYuri PankovIf the resulting value would overflow, the
1511767006bSBryan Cantrill.Xr write 2
1521767006bSBryan Cantrillwill block until the value would not overflow
15394733b36SAndy Fiddaman.Po or return
15494733b36SAndy Fiddaman.Er EAGAIN
15594733b36SAndy Fiddamanif the instance was created with
15694733b36SAndy Fiddaman.Dv EFD_NONBLOCK
15794733b36SAndy Fiddaman.Pc .
1581767006bSBryan CantrillIf the buffer specified to
1591767006bSBryan Cantrill.Xr write 2
1601767006bSBryan Cantrillis less than eight bytes in length,
16194733b36SAndy Fiddaman.Er EINVAL
1621767006bSBryan Cantrillwill be returned.
16394733b36SAndy Fiddaman.It Xo
16494733b36SAndy Fiddaman.Xr poll 2 ,
16594733b36SAndy Fiddaman.Xr port_get 3C ,
16694733b36SAndy Fiddaman.Xr  epoll_wait 3C
16794733b36SAndy Fiddaman.Xc
1681767006bSBryan CantrillProvide notification when the 64-bit counter associated
1691767006bSBryan Cantrillwith the instance is ready for reading or writing, as specified.
1701767006bSBryan CantrillIf the 64-bit value associated with the instance is non-zero,
17194733b36SAndy Fiddaman.Dv POLLIN
1721767006bSBryan Cantrilland
17394733b36SAndy Fiddaman.Dv POLLRDNORM
1741767006bSBryan Cantrillwill be set; if the value 1 can be added the value
1751767006bSBryan Cantrillwithout blocking,
17694733b36SAndy Fiddaman.Dv POLLOUT
1771767006bSBryan Cantrilland
17894733b36SAndy Fiddaman.Dv POLLWRNORM
1791767006bSBryan Cantrillwill be set.
1801767006bSBryan Cantrill.El
18194733b36SAndy Fiddaman.Pp
18294733b36SAndy Fiddaman.Fn eventfd_read
18394733b36SAndy Fiddamanand
18494733b36SAndy Fiddaman.Fn eventfd_write
18594733b36SAndy Fiddamanare provided for compatibility with
18694733b36SAndy Fiddaman.Sy glibc
18794733b36SAndy Fiddamanand are wrappers around
18894733b36SAndy Fiddaman.Xr read 2
18994733b36SAndy Fiddamanand
19094733b36SAndy Fiddaman.Xr write 2 ,
19194733b36SAndy Fiddamanrespectively.
19294733b36SAndy FiddamanThey return
19394733b36SAndy Fiddaman.Sy 0
19494733b36SAndy Fiddamanif the correct number of bytes was transferred and
19594733b36SAndy Fiddaman.Sy -1
19694733b36SAndy Fiddamanotherwise.
19794733b36SAndy FiddamanThese functions may return
19894733b36SAndy Fiddaman.Sy -1
19994733b36SAndy Fiddamanwithout setting
20094733b36SAndy Fiddaman.Va errno .
2011767006bSBryan Cantrill.Sh RETURN VALUES
20294733b36SAndy FiddamanUpon successful completion,
20394733b36SAndy Fiddaman.Fn eventfd
20494733b36SAndy Fiddamanreturns a file descriptor associated with the instance.
20572d3dbb9SYuri PankovOtherwise,
20672d3dbb9SYuri Pankov.Sy -1
20772d3dbb9SYuri Pankovis returned and
20894733b36SAndy Fiddaman.Va errno
2091767006bSBryan Cantrillis set to indicate the error.
21094733b36SAndy Fiddaman.Pp
21194733b36SAndy FiddamanUpon successful completion,
21294733b36SAndy Fiddaman.Fn eventfd_read
21394733b36SAndy Fiddamanand
21494733b36SAndy Fiddaman.Fn eventfd_write
21594733b36SAndy Fiddamanreturn
21694733b36SAndy Fiddaman.Sy 0 .
21794733b36SAndy FiddamanOtherwise,
21894733b36SAndy Fiddaman.Sy -1
21994733b36SAndy Fiddamanis returned.
2201767006bSBryan Cantrill.Sh ERRORS
2211767006bSBryan CantrillThe
2221767006bSBryan Cantrill.Fn eventfd
2231767006bSBryan Cantrillfunction will fail if:
2241767006bSBryan Cantrill.Bl -tag -width Er
2251767006bSBryan Cantrill.It Er EINVAL
2261767006bSBryan CantrillThe
2271767006bSBryan Cantrill.Fa flags
2281767006bSBryan Cantrillare invalid.
2291767006bSBryan Cantrill.It Er EMFILE
2301767006bSBryan CantrillThere are currently
2311767006bSBryan Cantrill.Pf { Sy OPEN_MAX Ns }
2321767006bSBryan Cantrillfile descriptors open in the calling process.
2331767006bSBryan Cantrill.El
2341767006bSBryan Cantrill.Sh SEE ALSO
2351767006bSBryan Cantrill.Xr poll 2 ,
23694733b36SAndy Fiddaman.Xr read 2 ,
23794733b36SAndy Fiddaman.Xr write 2 ,
2381767006bSBryan Cantrill.Xr epoll_wait 3C ,
2393a005aadSYuri Pankov.Xr port_get 3C ,
240*bbf21555SRichard Lowe.Xr eventfd 7
241