xref: /titanic_51/usr/src/man/man3c/timerfd_create.3c (revision 3a005aada8ac0e291c13cbc488ba9ae1473f0a96)
16a72db4aSBryan Cantrill.\"
26a72db4aSBryan Cantrill.\" This file and its contents are supplied under the terms of the
36a72db4aSBryan Cantrill.\" Common Development and Distribution License ("CDDL"), version 1.0.
46a72db4aSBryan Cantrill.\" You may only use this file in accordance with the terms of version
56a72db4aSBryan Cantrill.\" 1.0 of the CDDL.
66a72db4aSBryan Cantrill.\"
76a72db4aSBryan Cantrill.\" A full copy of the text of the CDDL should have accompanied this
86a72db4aSBryan Cantrill.\" source.  A copy of the CDDL is also available via the Internet at
96a72db4aSBryan Cantrill.\" http://www.illumos.org/license/CDDL.
106a72db4aSBryan Cantrill.\"
116a72db4aSBryan Cantrill.\"
126a72db4aSBryan Cantrill.\" Copyright (c) 2015, Joyent, Inc. All Rights Reserved.
136a72db4aSBryan Cantrill.\"
146a72db4aSBryan Cantrill.Dd Feb 23, 2105
156a72db4aSBryan Cantrill.Dt TIMERFD 3C
166a72db4aSBryan Cantrill.Os
176a72db4aSBryan Cantrill.Sh NAME
186a72db4aSBryan Cantrill.Nm timerfd_create ,
196a72db4aSBryan Cantrill.Nm timerfd_settime ,
206a72db4aSBryan Cantrill.Nm timerfd_gettime
216a72db4aSBryan Cantrill.Nd create and manipulate timers via a file descriptor interface
226a72db4aSBryan Cantrill.Sh SYNOPSIS
236a72db4aSBryan Cantrill.In sys/timerfd.h
246a72db4aSBryan Cantrill.Ft int
256a72db4aSBryan Cantrill.Fo timerfd_create
266a72db4aSBryan Cantrill.Fa "int clockid"
276a72db4aSBryan Cantrill.Fa "int flags"
286a72db4aSBryan Cantrill.Fc
296a72db4aSBryan Cantrill.Ft int
306a72db4aSBryan Cantrill.Fo timerfd_settime
316a72db4aSBryan Cantrill.Fa "int fd"
326a72db4aSBryan Cantrill.Fa "int flags"
336a72db4aSBryan Cantrill.Fa "const struct itimerspec *restrict value"
346a72db4aSBryan Cantrill.Fa "struct itimterspec *restrict ovalue"
356a72db4aSBryan Cantrill.Fc
366a72db4aSBryan Cantrill.Ft int
376a72db4aSBryan Cantrill.Fo timerfd_gettime
386a72db4aSBryan Cantrill.Fa "int fd"
396a72db4aSBryan Cantrill.Fa "struct itimerspec *value"
406a72db4aSBryan Cantrill.Fc
416a72db4aSBryan Cantrill.Sh DESCRIPTION
426a72db4aSBryan CantrillThese routines create and manipulate timers in which events are associated
436a72db4aSBryan Cantrillwith a file descriptor, allowing for timer-based events to be used
446a72db4aSBryan Cantrillin file-descriptor based facilities like
456a72db4aSBryan Cantrill.Xr poll 2 ,
466a72db4aSBryan Cantrill.Xr port_get 3C
476a72db4aSBryan Cantrillor
486a72db4aSBryan Cantrill.Xr epoll_wait 3C .
496a72db4aSBryan CantrillThe
506a72db4aSBryan Cantrill.Fn timerfd_create
516a72db4aSBryan Cantrillfunction creates a timer with the clock
526a72db4aSBryan Cantrilltype specified by
536a72db4aSBryan Cantrill.Fa clockid .
546a72db4aSBryan CantrillThe
556a72db4aSBryan Cantrill.Sy CLOCK_REALTIME
566a72db4aSBryan Cantrilland
576a72db4aSBryan Cantrill.Sy CLOCK_HIGHRES
586a72db4aSBryan Cantrillclock types, as defined in
596a72db4aSBryan Cantrill.Xr timer_create 3C ,
606a72db4aSBryan Cantrillare supported by
616a72db4aSBryan Cantrill.Fn timerfd_create .
626a72db4aSBryan Cantrill(Note that
636a72db4aSBryan Cantrill.Sy CLOCK_MONOTONIC
646a72db4aSBryan Cantrillmay be used as an alias for
656a72db4aSBryan Cantrill.Sy CLOCK_HIGHRES Ns .)
666a72db4aSBryan Cantrill.Pp
676a72db4aSBryan CantrillThe
686a72db4aSBryan Cantrill.Fa flags
696a72db4aSBryan Cantrillargument specifies additional parameters for the timer instance, and can have
706a72db4aSBryan Cantrillany of the following values:
716a72db4aSBryan Cantrill.Bl -hang -width Ds
726a72db4aSBryan Cantrill.It Sy TFD_CLOEXEC
736a72db4aSBryan Cantrill.Bd -filled -compact
746a72db4aSBryan CantrillInstance will be closed upon an
756a72db4aSBryan Cantrill.Xr exec 2 ;
766a72db4aSBryan Cantrillsee
776a72db4aSBryan Cantrill.Xr open 2 Ns 's
786a72db4aSBryan Cantrilldescription of
796a72db4aSBryan Cantrill.Sy O_CLOEXEC .
806a72db4aSBryan Cantrill.Ed
816a72db4aSBryan Cantrill.It Sy TFD_NONBLOCK
826a72db4aSBryan Cantrill.Bd -filled -compact
836a72db4aSBryan CantrillInstance will be set to be non-blocking.  A
846a72db4aSBryan Cantrill.Xr read 2
856a72db4aSBryan Cantrillon a
866a72db4aSBryan Cantrill.Sy timerfd
876a72db4aSBryan Cantrillinstance that has been initialized with
886a72db4aSBryan Cantrill.Sy TFD_NONBLOCK
896a72db4aSBryan Cantrillwill return
906a72db4aSBryan Cantrill.Sy EAGAIN
916a72db4aSBryan Cantrillin lieu of blocking if the
926a72db4aSBryan Cantrilltimer has not expired since the last
936a72db4aSBryan Cantrill.Fn timerfd_settime
946a72db4aSBryan Cantrillor successful
956a72db4aSBryan Cantrill.Fn read .
966a72db4aSBryan Cantrill.Ed
976a72db4aSBryan Cantrill.El
986a72db4aSBryan Cantrill.Pp
996a72db4aSBryan CantrillThe following operations can be performed upon a
1006a72db4aSBryan Cantrill.Sy timerfd
1016a72db4aSBryan Cantrillinstance:
1026a72db4aSBryan Cantrill.Bl -hang -width Ds
1036a72db4aSBryan Cantrill.It Sy read(2)
1046a72db4aSBryan Cantrill.Bd -filled -compact
1056a72db4aSBryan CantrillAtomically reads and clears the number of timer expirations since the
1066a72db4aSBryan Cantrilllast successful
1076a72db4aSBryan Cantrill.Xr read 2
1086a72db4aSBryan Cantrillor
1096a72db4aSBryan Cantrill.Fn timerfd_settime .
1106a72db4aSBryan CantrillUpon success,
1116a72db4aSBryan Cantrillthe number of expirations will be copied into the eight byte buffer
1126a72db4aSBryan Cantrillpassed to the system call. If there have been no expirations of the
1136a72db4aSBryan Cantrilltimer since the last successful
1146a72db4aSBryan Cantrill.Xr read 2
1156a72db4aSBryan Cantrillor
1166a72db4aSBryan Cantrill.Fn timerfd_sttime ,
1176a72db4aSBryan Cantrill.Xr read 2
1186a72db4aSBryan Cantrillwill block until at least the next expiration,
1196a72db4aSBryan Cantrillor return
1206a72db4aSBryan Cantrill.Sy EAGAIN
1216a72db4aSBryan Cantrillif the instance was created with
1226a72db4aSBryan Cantrill.Sy TFD_NONBLOCK .
1236a72db4aSBryan CantrillNote that if multiple threads are blocked in
1246a72db4aSBryan Cantrill.Xr read 2
1256a72db4aSBryan Cantrillfor the same timer, only one of them will return upon
1266a72db4aSBryan Cantrilla single timer expiration.
1276a72db4aSBryan Cantrill.Pp
1286a72db4aSBryan CantrillIf the buffer specified to
1296a72db4aSBryan Cantrill.Xr read 2
1306a72db4aSBryan Cantrillis less than
1316a72db4aSBryan Cantrilleight bytes in length,
1326a72db4aSBryan Cantrill.Sy EINAVL
1336a72db4aSBryan Cantrillwill be returned.
1346a72db4aSBryan Cantrill.Ed
1356a72db4aSBryan Cantrill.It Sy poll(2), port_get(3C), epoll_wait(3C)
1366a72db4aSBryan Cantrill.Bd -filled -compact
1376a72db4aSBryan CantrillProvide notification when the timer expires or has expired in the past without
1386a72db4aSBryan Cantrilla more recent
1396a72db4aSBryan Cantrill.Xr read 2 .
1406a72db4aSBryan CantrillNote that threads being simultaneously
1416a72db4aSBryan Cantrillblocked in
1426a72db4aSBryan Cantrill.Xr read 2
1436a72db4aSBryan Cantrilland
1446a72db4aSBryan Cantrill.Xr poll 2
1456a72db4aSBryan Cantrill(or equivalents) for the same
1466a72db4aSBryan Cantrilltimer constitute an application-level race; on a timer expiration,
1476a72db4aSBryan Cantrillthe thread blocked in
1486a72db4aSBryan Cantrill.Xr poll 2
1496a72db4aSBryan Cantrillmay or may not return depending on how
1506a72db4aSBryan Cantrillit is scheduled with respect to the thread blocked in
1516a72db4aSBryan Cantrill.Xr read 2 .
1526a72db4aSBryan Cantrill.Ed
1536a72db4aSBryan Cantrill.It Sy timerfd_gettime()
1546a72db4aSBryan Cantrill.Bd -filled -compact
1556a72db4aSBryan CantrillReturns the amount of time until the next timer expiration, with the
1566a72db4aSBryan Cantrillsame functional signature and semantics as
1576a72db4aSBryan Cantrill.Xr timer_gettime 3C .
1586a72db4aSBryan Cantrill.Ed
1596a72db4aSBryan Cantrill.It Sy timerfd_settime()
1606a72db4aSBryan Cantrill.Bd -filled -compact
1616a72db4aSBryan CantrillSets or disarms the timer, with the
1626a72db4aSBryan Cantrillsame functional signature and semantics as
1636a72db4aSBryan Cantrill.Xr timer_settime 3C .
1646a72db4aSBryan Cantrill.Ed
1656a72db4aSBryan Cantrill.El
1666a72db4aSBryan Cantrill.Sh RETURN VALUES
1676a72db4aSBryan CantrillUpon succesful completion, a file descriptor associated with the instance
1686a72db4aSBryan Cantrillis returned. Otherwise,
1696a72db4aSBryan Cantrill.Sy -1
1706a72db4aSBryan Cantrillis returned and errno is set to indicate the error.
1716a72db4aSBryan Cantrill.Sh ERRORS
1726a72db4aSBryan CantrillThe
173*3a005aadSYuri Pankov.Fn timerfd_create
1746a72db4aSBryan Cantrillfunction will fail if:
1756a72db4aSBryan Cantrill.Bl -tag -width Er
1766a72db4aSBryan Cantrill.It Er EINAL
1776a72db4aSBryan CantrillThe
1786a72db4aSBryan Cantrill.Fa flags
1796a72db4aSBryan Cantrillare invalid.
1806a72db4aSBryan Cantrill.It Er EMFILE
1816a72db4aSBryan CantrillThere are currently
1826a72db4aSBryan Cantrill.Pf { Sy OPEN_MAX Ns }
1836a72db4aSBryan Cantrillfile descriptors open in the calling process.
1846a72db4aSBryan Cantrill.It Er EPERM
1856a72db4aSBryan CantrillThe
1866a72db4aSBryan Cantrill.Fa clock_id ,
1876a72db4aSBryan Cantrillis
1886a72db4aSBryan Cantrill.Sy CLOCK_HIGHRES
1896a72db4aSBryan Cantrilland the
1906a72db4aSBryan Cantrill.Pf { Sy PRIV_PROC_CLOCK_HIGHRES Ns }
1916a72db4aSBryan Cantrillis not asserted in the effective set of the calling process.
1926a72db4aSBryan Cantrill.El
1936a72db4aSBryan Cantrill.Sh SEE ALSO
1946a72db4aSBryan Cantrill.Xr poll 2 ,
1956a72db4aSBryan Cantrill.Xr epoll_wait 3C ,
196*3a005aadSYuri Pankov.Xr port_get 3C ,
1976a72db4aSBryan Cantrill.Xr timer_create 3C ,
1986a72db4aSBryan Cantrill.Xr timer_gettime 3C ,
1996a72db4aSBryan Cantrill.Xr timer_settime 3C ,
2006a72db4aSBryan Cantrill.Xr privileages 5 ,
2016a72db4aSBryan Cantrill.Xr timerfd 5
202