TIMERFD(3C) Standard C Library Functions TIMERFD(3C)
NAME
timerfd_create,
timerfd_settime,
timerfd_gettime - create and
manipulate timers via a file descriptor interface
SYNOPSIS
#include <sys/timerfd.h> int timerfd_create(
int clockid,
int flags);
int timerfd_settime(
int fd,
int flags,
const struct itimerspec *restrict value,
struct itimerspec *restrict ovalue);
int timerfd_gettime(
int fd,
struct itimerspec *value);
DESCRIPTION
These routines create and manipulate timers in which events are
associated with a file descriptor, allowing for timer-based events to
be used in file-descriptor based facilities like
poll(2),
port_get(3C) or
epoll_wait(3C). The
timerfd_create() function creates a timer with
the clock type specified by
clockid. The
CLOCK_REALTIME and
CLOCK_HIGHRES clock types, as defined in
timer_create(3C), are
supported by
timerfd_create(). (Note that
CLOCK_MONOTONIC may be used
as an alias for
CLOCK_HIGHRES.)
The
flags argument specifies additional parameters for the timer
instance, and can have any of the following values:
TFD_CLOEXEC Instance will be closed upon an
exec(2); see
open(2)'s
description of
O_CLOEXEC.
TFD_NONBLOCK Instance will be set to be non-blocking. A
read(2) on a
timerfd instance that has been initialized with
TFD_NONBLOCK will return
EAGAIN in lieu of blocking if the timer has not
expired since the last
timerfd_settime() or successful
read().
The following operations can be performed upon a
timerfd instance:
read(2) Atomically reads and clears the number of timer expirations
since the last successful
read(2) or
timerfd_settime(). Upon
success, the number of expirations will be copied into the
eight byte buffer passed to the system call. If there have
been no expirations of the timer since the last successful
read(2) or
timerfd_sttime(),
read(2) will block until at least
the next expiration, or return
EAGAIN if the instance was
created with
TFD_NONBLOCK. Note that if multiple threads are
blocked in
read(2) for the same timer, only one of them will
return upon a single timer expiration.
If the buffer specified to
read(2) is less than eight bytes in
length,
EINVAL will be returned.
poll(2), port_get(3C), epoll_wait(3C) Provide notification when the timer expires or has expired in
the past without a more recent
read(2). Note that threads
being simultaneously blocked in
read(2) and
poll(2) (or
equivalents) for the same timer constitute an application-level
race; on a timer expiration, the thread blocked in
poll(2) may
or may not return depending on how it is scheduled with respect
to the thread blocked in
read(2).
timerfd_gettime() Returns the amount of time until the next timer expiration,
with the same functional signature and semantics as
timer_gettime(3C).
timerfd_settime() Sets or disarms the timer, with the same functional signature
and semantics as
timer_settime(3C).
RETURN VALUES
Upon successful completion, a file descriptor associated with the
instance is returned. Otherwise,
-1 is returned and errno is set to
indicate the error.
ERRORS
The
timerfd_create() function will fail if:
EINAL The
flags are invalid.
EMFILE There are currently {
OPEN_MAX} file descriptors open
in the calling process.
EPERM The
clock_id, is
CLOCK_HIGHRES and the
{
PRIV_PROC_CLOCK_HIGHRES} is not asserted in the
effective set of the calling process.
SEE ALSO
poll(2),
epoll_wait(3C),
port_get(3C),
timer_create(3C),
timer_gettime(3C),
timer_settime(3C),
privileges(7),
timerfd(7)illumos February 17, 2023 illumos