xref: /titanic_53/usr/src/man/man3c/timerfd_create.3c (revision 6a72db4a7fa12c3e0d1c1cf91a07390739fa0fbf)
1*6a72db4aSBryan Cantrill.\"
2*6a72db4aSBryan Cantrill.\" This file and its contents are supplied under the terms of the
3*6a72db4aSBryan Cantrill.\" Common Development and Distribution License ("CDDL"), version 1.0.
4*6a72db4aSBryan Cantrill.\" You may only use this file in accordance with the terms of version
5*6a72db4aSBryan Cantrill.\" 1.0 of the CDDL.
6*6a72db4aSBryan Cantrill.\"
7*6a72db4aSBryan Cantrill.\" A full copy of the text of the CDDL should have accompanied this
8*6a72db4aSBryan Cantrill.\" source.  A copy of the CDDL is also available via the Internet at
9*6a72db4aSBryan Cantrill.\" http://www.illumos.org/license/CDDL.
10*6a72db4aSBryan Cantrill.\"
11*6a72db4aSBryan Cantrill.\"
12*6a72db4aSBryan Cantrill.\" Copyright (c) 2015, Joyent, Inc. All Rights Reserved.
13*6a72db4aSBryan Cantrill.\"
14*6a72db4aSBryan Cantrill.Dd Feb 23, 2105
15*6a72db4aSBryan Cantrill.Dt TIMERFD 3C
16*6a72db4aSBryan Cantrill.Os
17*6a72db4aSBryan Cantrill.Sh NAME
18*6a72db4aSBryan Cantrill.Nm timerfd_create ,
19*6a72db4aSBryan Cantrill.Nm timerfd_settime ,
20*6a72db4aSBryan Cantrill.Nm timerfd_gettime
21*6a72db4aSBryan Cantrill.Nd create and manipulate timers via a file descriptor interface
22*6a72db4aSBryan Cantrill.Sh SYNOPSIS
23*6a72db4aSBryan Cantrill.In sys/timerfd.h
24*6a72db4aSBryan Cantrill.Ft int
25*6a72db4aSBryan Cantrill.Fo timerfd_create
26*6a72db4aSBryan Cantrill.Fa "int clockid"
27*6a72db4aSBryan Cantrill.Fa "int flags"
28*6a72db4aSBryan Cantrill.Fc
29*6a72db4aSBryan Cantrill.Ft int
30*6a72db4aSBryan Cantrill.Fo timerfd_settime
31*6a72db4aSBryan Cantrill.Fa "int fd"
32*6a72db4aSBryan Cantrill.Fa "int flags"
33*6a72db4aSBryan Cantrill.Fa "const struct itimerspec *restrict value"
34*6a72db4aSBryan Cantrill.Fa "struct itimterspec *restrict ovalue"
35*6a72db4aSBryan Cantrill.Fc
36*6a72db4aSBryan Cantrill.Ft int
37*6a72db4aSBryan Cantrill.Fo timerfd_gettime
38*6a72db4aSBryan Cantrill.Fa "int fd"
39*6a72db4aSBryan Cantrill.Fa "struct itimerspec *value"
40*6a72db4aSBryan Cantrill.Fc
41*6a72db4aSBryan Cantrill.Sh DESCRIPTION
42*6a72db4aSBryan CantrillThese routines create and manipulate timers in which events are associated
43*6a72db4aSBryan Cantrillwith a file descriptor, allowing for timer-based events to be used
44*6a72db4aSBryan Cantrillin file-descriptor based facilities like
45*6a72db4aSBryan Cantrill.Xr poll 2 ,
46*6a72db4aSBryan Cantrill.Xr port_get 3C
47*6a72db4aSBryan Cantrillor
48*6a72db4aSBryan Cantrill.Xr epoll_wait 3C .
49*6a72db4aSBryan CantrillThe
50*6a72db4aSBryan Cantrill.Fn timerfd_create
51*6a72db4aSBryan Cantrillfunction creates a timer with the clock
52*6a72db4aSBryan Cantrilltype specified by
53*6a72db4aSBryan Cantrill.Fa clockid .
54*6a72db4aSBryan CantrillThe
55*6a72db4aSBryan Cantrill.Sy CLOCK_REALTIME
56*6a72db4aSBryan Cantrilland
57*6a72db4aSBryan Cantrill.Sy CLOCK_HIGHRES
58*6a72db4aSBryan Cantrillclock types, as defined in
59*6a72db4aSBryan Cantrill.Xr timer_create 3C ,
60*6a72db4aSBryan Cantrillare supported by
61*6a72db4aSBryan Cantrill.Fn timerfd_create .
62*6a72db4aSBryan Cantrill(Note that
63*6a72db4aSBryan Cantrill.Sy CLOCK_MONOTONIC
64*6a72db4aSBryan Cantrillmay be used as an alias for
65*6a72db4aSBryan Cantrill.Sy CLOCK_HIGHRES Ns .)
66*6a72db4aSBryan Cantrill.Pp
67*6a72db4aSBryan CantrillThe
68*6a72db4aSBryan Cantrill.Fa flags
69*6a72db4aSBryan Cantrillargument specifies additional parameters for the timer instance, and can have
70*6a72db4aSBryan Cantrillany of the following values:
71*6a72db4aSBryan Cantrill.Bl -hang -width Ds
72*6a72db4aSBryan Cantrill.It Sy TFD_CLOEXEC
73*6a72db4aSBryan Cantrill.Bd -filled -compact
74*6a72db4aSBryan CantrillInstance will be closed upon an
75*6a72db4aSBryan Cantrill.Xr exec 2 ;
76*6a72db4aSBryan Cantrillsee
77*6a72db4aSBryan Cantrill.Xr open 2 Ns 's
78*6a72db4aSBryan Cantrilldescription of
79*6a72db4aSBryan Cantrill.Sy O_CLOEXEC .
80*6a72db4aSBryan Cantrill.Ed
81*6a72db4aSBryan Cantrill.It Sy TFD_NONBLOCK
82*6a72db4aSBryan Cantrill.Bd -filled -compact
83*6a72db4aSBryan CantrillInstance will be set to be non-blocking.  A
84*6a72db4aSBryan Cantrill.Xr read 2
85*6a72db4aSBryan Cantrillon a
86*6a72db4aSBryan Cantrill.Sy timerfd
87*6a72db4aSBryan Cantrillinstance that has been initialized with
88*6a72db4aSBryan Cantrill.Sy TFD_NONBLOCK
89*6a72db4aSBryan Cantrillwill return
90*6a72db4aSBryan Cantrill.Sy EAGAIN
91*6a72db4aSBryan Cantrillin lieu of blocking if the
92*6a72db4aSBryan Cantrilltimer has not expired since the last
93*6a72db4aSBryan Cantrill.Fn timerfd_settime
94*6a72db4aSBryan Cantrillor successful
95*6a72db4aSBryan Cantrill.Fn read .
96*6a72db4aSBryan Cantrill.Ed
97*6a72db4aSBryan Cantrill.El
98*6a72db4aSBryan Cantrill.Pp
99*6a72db4aSBryan CantrillThe following operations can be performed upon a
100*6a72db4aSBryan Cantrill.Sy timerfd
101*6a72db4aSBryan Cantrillinstance:
102*6a72db4aSBryan Cantrill.Bl -hang -width Ds
103*6a72db4aSBryan Cantrill.It Sy read(2)
104*6a72db4aSBryan Cantrill.Bd -filled -compact
105*6a72db4aSBryan CantrillAtomically reads and clears the number of timer expirations since the
106*6a72db4aSBryan Cantrilllast successful
107*6a72db4aSBryan Cantrill.Xr read 2
108*6a72db4aSBryan Cantrillor
109*6a72db4aSBryan Cantrill.Fn timerfd_settime .
110*6a72db4aSBryan CantrillUpon success,
111*6a72db4aSBryan Cantrillthe number of expirations will be copied into the eight byte buffer
112*6a72db4aSBryan Cantrillpassed to the system call. If there have been no expirations of the
113*6a72db4aSBryan Cantrilltimer since the last successful
114*6a72db4aSBryan Cantrill.Xr read 2
115*6a72db4aSBryan Cantrillor
116*6a72db4aSBryan Cantrill.Fn timerfd_sttime ,
117*6a72db4aSBryan Cantrill.Xr read 2
118*6a72db4aSBryan Cantrillwill block until at least the next expiration,
119*6a72db4aSBryan Cantrillor return
120*6a72db4aSBryan Cantrill.Sy EAGAIN
121*6a72db4aSBryan Cantrillif the instance was created with
122*6a72db4aSBryan Cantrill.Sy TFD_NONBLOCK .
123*6a72db4aSBryan CantrillNote that if multiple threads are blocked in
124*6a72db4aSBryan Cantrill.Xr read 2
125*6a72db4aSBryan Cantrillfor the same timer, only one of them will return upon
126*6a72db4aSBryan Cantrilla single timer expiration.
127*6a72db4aSBryan Cantrill.Pp
128*6a72db4aSBryan CantrillIf the buffer specified to
129*6a72db4aSBryan Cantrill.Xr read 2
130*6a72db4aSBryan Cantrillis less than
131*6a72db4aSBryan Cantrilleight bytes in length,
132*6a72db4aSBryan Cantrill.Sy EINAVL
133*6a72db4aSBryan Cantrillwill be returned.
134*6a72db4aSBryan Cantrill.Ed
135*6a72db4aSBryan Cantrill.It Sy poll(2), port_get(3C), epoll_wait(3C)
136*6a72db4aSBryan Cantrill.Bd -filled -compact
137*6a72db4aSBryan CantrillProvide notification when the timer expires or has expired in the past without
138*6a72db4aSBryan Cantrilla more recent
139*6a72db4aSBryan Cantrill.Xr read 2 .
140*6a72db4aSBryan CantrillNote that threads being simultaneously
141*6a72db4aSBryan Cantrillblocked in
142*6a72db4aSBryan Cantrill.Xr read 2
143*6a72db4aSBryan Cantrilland
144*6a72db4aSBryan Cantrill.Xr poll 2
145*6a72db4aSBryan Cantrill(or equivalents) for the same
146*6a72db4aSBryan Cantrilltimer constitute an application-level race; on a timer expiration,
147*6a72db4aSBryan Cantrillthe thread blocked in
148*6a72db4aSBryan Cantrill.Xr poll 2
149*6a72db4aSBryan Cantrillmay or may not return depending on how
150*6a72db4aSBryan Cantrillit is scheduled with respect to the thread blocked in
151*6a72db4aSBryan Cantrill.Xr read 2 .
152*6a72db4aSBryan Cantrill.Ed
153*6a72db4aSBryan Cantrill.It Sy timerfd_gettime()
154*6a72db4aSBryan Cantrill.Bd -filled -compact
155*6a72db4aSBryan CantrillReturns the amount of time until the next timer expiration, with the
156*6a72db4aSBryan Cantrillsame functional signature and semantics as
157*6a72db4aSBryan Cantrill.Xr timer_gettime 3C .
158*6a72db4aSBryan Cantrill.Ed
159*6a72db4aSBryan Cantrill.It Sy timerfd_settime()
160*6a72db4aSBryan Cantrill.Bd -filled -compact
161*6a72db4aSBryan CantrillSets or disarms the timer, with the
162*6a72db4aSBryan Cantrillsame functional signature and semantics as
163*6a72db4aSBryan Cantrill.Xr timer_settime 3C .
164*6a72db4aSBryan Cantrill.Ed
165*6a72db4aSBryan Cantrill.El
166*6a72db4aSBryan Cantrill.Sh RETURN VALUES
167*6a72db4aSBryan CantrillUpon succesful completion, a file descriptor associated with the instance
168*6a72db4aSBryan Cantrillis returned. Otherwise,
169*6a72db4aSBryan Cantrill.Sy -1
170*6a72db4aSBryan Cantrillis returned and errno is set to indicate the error.
171*6a72db4aSBryan Cantrill.Sh ERRORS
172*6a72db4aSBryan CantrillThe
173*6a72db4aSBryan Cantrill.Fn timerfd_create()
174*6a72db4aSBryan Cantrillfunction will fail if:
175*6a72db4aSBryan Cantrill.Bl -tag -width Er
176*6a72db4aSBryan Cantrill.It Er EINAL
177*6a72db4aSBryan CantrillThe
178*6a72db4aSBryan Cantrill.Fa flags
179*6a72db4aSBryan Cantrillare invalid.
180*6a72db4aSBryan Cantrill.It Er EMFILE
181*6a72db4aSBryan CantrillThere are currently
182*6a72db4aSBryan Cantrill.Pf { Sy OPEN_MAX Ns }
183*6a72db4aSBryan Cantrillfile descriptors open in the calling process.
184*6a72db4aSBryan Cantrill.It Er EPERM
185*6a72db4aSBryan CantrillThe
186*6a72db4aSBryan Cantrill.Fa clock_id ,
187*6a72db4aSBryan Cantrillis
188*6a72db4aSBryan Cantrill.Sy CLOCK_HIGHRES
189*6a72db4aSBryan Cantrilland the
190*6a72db4aSBryan Cantrill.Pf { Sy PRIV_PROC_CLOCK_HIGHRES Ns }
191*6a72db4aSBryan Cantrillis not asserted in the effective set of the calling process.
192*6a72db4aSBryan Cantrill.El
193*6a72db4aSBryan Cantrill.Sh SEE ALSO
194*6a72db4aSBryan Cantrill.Xr poll 2 ,
195*6a72db4aSBryan Cantrill.Xr port_get 3C ,
196*6a72db4aSBryan Cantrill.Xr epoll_wait 3C ,
197*6a72db4aSBryan Cantrill.Xr timer_create 3C ,
198*6a72db4aSBryan Cantrill.Xr timer_gettime 3C ,
199*6a72db4aSBryan Cantrill.Xr timer_settime 3C ,
200*6a72db4aSBryan Cantrill.Xr privileages 5 ,
201*6a72db4aSBryan Cantrill.Xr timerfd 5
202