xref: /titanic_53/usr/src/man/man3c/eventfd.3c (revision 1767006bb066ef500b90b432fba79d63d0d09b36)
1*1767006bSBryan Cantrill.\"
2*1767006bSBryan Cantrill.\" This file and its contents are supplied under the terms of the
3*1767006bSBryan Cantrill.\" Common Development and Distribution License ("CDDL"), version 1.0.
4*1767006bSBryan Cantrill.\" You may only use this file in accordance with the terms of version
5*1767006bSBryan Cantrill.\" 1.0 of the CDDL.
6*1767006bSBryan Cantrill.\"
7*1767006bSBryan Cantrill.\" A full copy of the text of the CDDL should have accompanied this
8*1767006bSBryan Cantrill.\" source.  A copy of the CDDL is also available via the Internet at
9*1767006bSBryan Cantrill.\" http://www.illumos.org/license/CDDL.
10*1767006bSBryan Cantrill.\"
11*1767006bSBryan Cantrill.\"
12*1767006bSBryan Cantrill.\" Copyright (c) 2014, Joyent, Inc. All Rights Reserved.
13*1767006bSBryan Cantrill.\"
14*1767006bSBryan Cantrill.Dd Dec 3, 2014
15*1767006bSBryan Cantrill.Dt EVENTFD 3C
16*1767006bSBryan Cantrill.Os
17*1767006bSBryan Cantrill.Sh NAME
18*1767006bSBryan Cantrill.Nm eventfd
19*1767006bSBryan Cantrill.Nd create a file descriptor for event notification
20*1767006bSBryan Cantrill.Sh SYNOPSIS
21*1767006bSBryan Cantrill.In sys/eventfd.h
22*1767006bSBryan Cantrill.Ft int
23*1767006bSBryan Cantrill.Fo eventfd
24*1767006bSBryan Cantrill.Fa "unsigned int initval"
25*1767006bSBryan Cantrill.Fa "int flags"
26*1767006bSBryan Cantrill.Fc
27*1767006bSBryan Cantrill.Sh DESCRIPTION
28*1767006bSBryan CantrillThe
29*1767006bSBryan Cantrill.Fn eventfd
30*1767006bSBryan Cantrillfunction creates an
31*1767006bSBryan Cantrill.Xr eventfd 5
32*1767006bSBryan Cantrillinstance that has an associated 64-bit unsigned counter. It returns a file
33*1767006bSBryan Cantrilldescriptor that can be operated upon via
34*1767006bSBryan Cantrill.Xr read 2 ,
35*1767006bSBryan Cantrill.Xr write 2
36*1767006bSBryan Cantrilland the facilities that notify of file descriptor activity (e.g.,
37*1767006bSBryan Cantrill.Xr poll 2 ,
38*1767006bSBryan Cantrill.Xr port_get 3C ,
39*1767006bSBryan Cantrill.Xr epoll_wait 3C Ns ).
40*1767006bSBryan CantrillTo dispose of the instance,
41*1767006bSBryan Cantrill.Xr close 2
42*1767006bSBryan Cantrillshould be called on the file descriptor.
43*1767006bSBryan Cantrill.Pp
44*1767006bSBryan CantrillThe
45*1767006bSBryan Cantrill.Fa initval
46*1767006bSBryan Cantrillargument specifies the initial value of the 64-bit counter associated with the
47*1767006bSBryan Cantrillinstance.  (Note that this limits the initial value to be a 32-bit quantity
48*1767006bSBryan Cantrilldespite the fact that the underlying counter is 64-bit.)
49*1767006bSBryan Cantrill.Pp
50*1767006bSBryan CantrillThe \fIflags\fR argument specifies additional parameters for the
51*1767006bSBryan Cantrillinstance, and can have any of the following values:
52*1767006bSBryan Cantrill.Bl -hang -width Ds
53*1767006bSBryan Cantrill.It Sy EFD_CLOEXEC
54*1767006bSBryan Cantrill.Bd -filled -compact
55*1767006bSBryan CantrillInstance will be closed upon an
56*1767006bSBryan Cantrill.Xr exec 2 ;
57*1767006bSBryan Cantrillsee
58*1767006bSBryan Cantrill.Xr open 2 Ns 's
59*1767006bSBryan Cantrilldescription of
60*1767006bSBryan Cantrill.Sy O_CLOEXEC .
61*1767006bSBryan Cantrill.Ed
62*1767006bSBryan Cantrill.It Sy EFD_NONBLOCK
63*1767006bSBryan Cantrill.Bd -filled -compact
64*1767006bSBryan CantrillInstance will be set to be non-blocking.  A
65*1767006bSBryan Cantrill.Xr read 2
66*1767006bSBryan Cantrillon an
67*1767006bSBryan Cantrill.Sy eventfd
68*1767006bSBryan Cantrillinstance that has been initialized with
69*1767006bSBryan Cantrill.Sy EFD_NONBLOCK
70*1767006bSBryan Cantrillwill return
71*1767006bSBryan Cantrill.Sy EAGAIN
72*1767006bSBryan Cantrillin lieu of blocking if the count associated with the instance is zero.
73*1767006bSBryan Cantrill.Ed
74*1767006bSBryan Cantrill.It EFD_SEMAPHORE
75*1767006bSBryan Cantrill.Bd -filled -compact
76*1767006bSBryan CantrillProvide counting semaphore semantics whereby a
77*1767006bSBryan Cantrill.Xr read 2
78*1767006bSBryan Cantrillwill atomically decrement rather than atomically clear the count when it
79*1767006bSBryan Cantrillbecomes non-zero. See below for details on
80*1767006bSBryan Cantrill.Xr read 2
81*1767006bSBryan Cantrillsemantics.
82*1767006bSBryan Cantrill.Ed
83*1767006bSBryan Cantrill.El
84*1767006bSBryan Cantrill.Pp
85*1767006bSBryan CantrillThe following operations can be performed upon an
86*1767006bSBryan Cantrill.Sy eventfd
87*1767006bSBryan Cantrillinstance:
88*1767006bSBryan Cantrill.Bl -hang -width Ds
89*1767006bSBryan Cantrill.It Sy read(2)
90*1767006bSBryan Cantrill.Bd -filled -compact
91*1767006bSBryan CantrillAtomically reads and modifies the value of the 64-bit counter associated
92*1767006bSBryan Cantrillwith the instance.  The precise semantics
93*1767006bSBryan Cantrillof
94*1767006bSBryan Cantrill.Xr read 2
95*1767006bSBryan Cantrilldepend on the disposition of
96*1767006bSBryan Cantrill.Sy EFD_SEMAPHORE
97*1767006bSBryan Cantrillwith
98*1767006bSBryan Cantrillrespect to the instance: if
99*1767006bSBryan Cantrill.Sy EFD_SEMAPTHORE
100*1767006bSBryan Cantrillwas set when the instance was created,
101*1767006bSBryan Cantrill.Xr read 2
102*1767006bSBryan Cantrillwill
103*1767006bSBryan Cantrill.Em atomically decrement
104*1767006bSBryan Cantrillthe counter if (and when) it is non-zero, copying the value 1 to the eight
105*1767006bSBryan Cantrillbyte buffer passed to the system call; if
106*1767006bSBryan Cantrill.Sy EFD_SEMAPHORE
107*1767006bSBryan Cantrillwas not set,
108*1767006bSBryan Cantrill.Xr read 2
109*1767006bSBryan Cantrillwill
110*1767006bSBryan Cantrill.Em atomically clear
111*1767006bSBryan Cantrillthe counter if (and when) it is non-zero, copying the former value of the
112*1767006bSBryan Cantrillcounter to the eight byte buffer passed to the
113*1767006bSBryan Cantrillsystem call.  In either case,
114*1767006bSBryan Cantrill.Xr read 2
115*1767006bSBryan Cantrillwill block if the counter is
116*1767006bSBryan Cantrillzero (or return
117*1767006bSBryan Cantrill.Sy EAGAIN
118*1767006bSBryan Cantrillif the instance was created with
119*1767006bSBryan Cantrill.Sy EFD_NONBLOCK Ns ).
120*1767006bSBryan CantrillIf the buffer specified to
121*1767006bSBryan Cantrill.Xr read 2
122*1767006bSBryan Cantrillis less than
123*1767006bSBryan Cantrilleight bytes in length,
124*1767006bSBryan Cantrill.Sy EINVAL
125*1767006bSBryan Cantrillwill be returned.
126*1767006bSBryan Cantrill.Ed
127*1767006bSBryan Cantrill.It Sy write(2)
128*1767006bSBryan Cantrill.Bd -filled -compact
129*1767006bSBryan CantrillAtomically adds the 64-bit value pointed to by the buffer to the 64-bit
130*1767006bSBryan Cantrillcounter associated with the instance.  If the resulting value would overflow,
131*1767006bSBryan Cantrillthe
132*1767006bSBryan Cantrill.Xr write 2
133*1767006bSBryan Cantrillwill block until the value would not overflow
134*1767006bSBryan Cantrill(or return
135*1767006bSBryan Cantrill.Sy EAGAIN
136*1767006bSBryan CantrillEAGAIN if the instance was created with
137*1767006bSBryan Cantrill.Sy EFD_NONBLOCK Ns ).
138*1767006bSBryan CantrillIf the buffer specified to
139*1767006bSBryan Cantrill.Xr write 2
140*1767006bSBryan Cantrillis less than eight bytes in length,
141*1767006bSBryan Cantrill.Sy EINVAL
142*1767006bSBryan Cantrillwill be returned.
143*1767006bSBryan Cantrill.Ed
144*1767006bSBryan Cantrill.It Sy poll(2), port_get(3C), epoll_wait(3C)
145*1767006bSBryan Cantrill.Bd -filled -compact
146*1767006bSBryan CantrillProvide notification when the 64-bit counter associated
147*1767006bSBryan Cantrillwith the instance is ready for reading or writing, as specified.
148*1767006bSBryan CantrillIf the 64-bit value associated with the instance is non-zero,
149*1767006bSBryan Cantrill.Sy POLLIN
150*1767006bSBryan Cantrilland
151*1767006bSBryan Cantrill.Sy POLLRDNORM
152*1767006bSBryan Cantrillwill be set; if the value 1 can be added the value
153*1767006bSBryan Cantrillwithout blocking,
154*1767006bSBryan Cantrill.Sy POLLOUT
155*1767006bSBryan Cantrilland
156*1767006bSBryan Cantrill.Sy POLLWRNORM
157*1767006bSBryan Cantrillwill be set.
158*1767006bSBryan Cantrill.Ed
159*1767006bSBryan Cantrill.El
160*1767006bSBryan Cantrill.Sh RETURN VALUES
161*1767006bSBryan CantrillUpon succesful completion, a file descriptor associated with the instance
162*1767006bSBryan Cantrillis returned. Otherwise,
163*1767006bSBryan Cantrill.Sy -1 is returned and
164*1767006bSBryan Cantrill.Sy errno
165*1767006bSBryan Cantrillis set to indicate the error.
166*1767006bSBryan Cantrill.Sh ERRORS
167*1767006bSBryan CantrillThe
168*1767006bSBryan Cantrill.Fn eventfd
169*1767006bSBryan Cantrillfunction will fail if:
170*1767006bSBryan Cantrill.Bl -tag -width Er
171*1767006bSBryan Cantrill.It Er EINVAL
172*1767006bSBryan CantrillThe
173*1767006bSBryan Cantrill.Fa flags
174*1767006bSBryan Cantrillare invalid.
175*1767006bSBryan Cantrill.It Er EMFILE
176*1767006bSBryan CantrillThere are currently
177*1767006bSBryan Cantrill.Pf { Sy OPEN_MAX Ns }
178*1767006bSBryan Cantrillfile descriptors open in the calling process.
179*1767006bSBryan Cantrill.El
180*1767006bSBryan Cantrill.Sh SEE ALSO
181*1767006bSBryan Cantrill.Xr poll 2 ,
182*1767006bSBryan Cantrill.Xr port_get 3C ,
183*1767006bSBryan Cantrill.Xr epoll_wait 3C ,
184*1767006bSBryan Cantrill.Xr eventfd 5
185