summaryrefslogtreecommitdiff
path: root/static/netbsd/man2/timerfd.2
diff options
context:
space:
mode:
Diffstat (limited to 'static/netbsd/man2/timerfd.2')
-rw-r--r--static/netbsd/man2/timerfd.2323
1 files changed, 323 insertions, 0 deletions
diff --git a/static/netbsd/man2/timerfd.2 b/static/netbsd/man2/timerfd.2
new file mode 100644
index 00000000..20398881
--- /dev/null
+++ b/static/netbsd/man2/timerfd.2
@@ -0,0 +1,323 @@
+.\" $NetBSD: timerfd.2,v 1.4 2021/09/23 13:59:27 uwe Exp $
+.\"
+.\" Copyright (c) 2021 The NetBSD Foundation, Inc.
+.\" All rights reserved.
+.\"
+.\" This code is derived from software contributed to The NetBSD Foundation
+.\" by Jason R. Thorpe.
+.\"
+.\" Redistribution and use in source and binary forms, with or without
+.\" modification, are permitted provided that the following conditions
+.\" are met:
+.\" 1. Redistributions of source code must retain the above copyright
+.\" notice, this list of conditions and the following disclaimer.
+.\" 2. Redistributions in binary form must reproduce the above copyright
+.\" notice, this list of conditions and the following disclaimer in the
+.\" documentation and/or other materials provided with the distribution.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+.\" ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+.\" TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+.\" PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+.\" BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+.\" CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+.\" SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+.\" CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+.\" ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+.\" POSSIBILITY OF SUCH DAMAGE.
+.\"
+.Dd September 17, 2021
+.Dt TIMERFD 2
+.Os
+.\"
+.\"
+.Sh NAME
+.Nm timerfd ,
+.Nm timerfd_create ,
+.Nm timerfd_gettime ,
+.Nm timerfd_settime
+.Nd create and interact with a timer descriptor
+.\"
+.\"
+.Sh SYNOPSIS
+.In sys/timerfd.h
+.Ft int
+.Fn timerfd_create "clockid_t clockid" "int flags"
+.Ft int
+.Fn timerfd_gettime "int fd" "struct itimerspec *tim"
+.Ft int
+.Fn timerfd_settime "int fd" "int flags" \
+"const struct itimerspec *tim" "struct itimerspec *otim"
+.\"
+.\"
+.Sh DESCRIPTION
+.Nm
+presents an interface to interval timers associated with a file descriptor.
+These timers are functionally equivalent to per-process timers but are
+associated with a file descriptor, rather than a process.
+Because they are associated with a file descriptor, they may be passed
+to other processes, inherited across a fork, and multiplexed using
+.Xr kevent 2 ,
+.Xr poll 2 ,
+or
+.Xr select 2 .
+When a
+.Nm
+object is no longer needed, it may be disposed of using
+.Xr close 2 .
+.Pp
+The
+.Fn timerfd_create
+system call creates a
+.Nm
+object using the clock specified in the
+.Fa clockid
+argument.
+Valid values for
+.Fa clockid
+are
+.Dv CLOCK_REALTIME
+and
+.Dv CLOCK_MONOTONIC .
+The following flags define the behavior of the resulting object:
+.Bl -tag -width Dv
+.It Dv TFD_CLOEXEC
+This is an alias for the
+.Dv O_CLOEXEC
+flag; see
+.Xr open 2
+for more information.
+.It Dv TFD_NONBLOCK
+This is an alias for the
+.Dv O_NONBLOCK
+flag; see
+.Xr open 2
+for more information.
+.El
+.Pp
+Each time a
+.Nm
+timer expires, an internal counter is incremented.
+Reads from an
+.Nm
+object return the value of this counter in the caller's buffer as an
+unsigned 64-bit integer and reset the counter to\~0.
+If the value of the
+.Nm
+object's counter is\~0,
+then reads will block, unless the
+.Nm
+object is set for non-blocking I/O.
+.Pp
+Writes to a
+.Nm
+object are not supported.
+.Pp
+The
+.Fn timerfd_settime
+system call sets the next expiration time of the
+.Nm
+object to the
+.Va it_value
+.Po
+see
+.Xr itimerspec 3
+.Pc
+specified in the
+.Fa tim
+argument.
+If the value is\~0,
+the timer is disarmed.
+If the argument
+.Fa otim
+is not
+.Dv NULL
+the old timer settings are returned.
+The following flags may be specified to alter the behavior of the timer:
+.Bl -tag -width "TFD_TIMER_CANCEL_ON_SET"
+.It Dv TFD_TIMER_ABSTIME
+The specified timer value is an absolute time.
+This is equivalent to specifying
+.Dv TIMER_ABSTIME
+to
+.Xr timer_settime 2 .
+Otherwise, the time value is a relative time, equivalent to specifying
+.Dv TIMER_RELTIME
+to
+.Xr timer_settime 2 .
+.It Dv TFD_TIMER_CANCEL_ON_SET
+If the
+.Nm
+object's clock ID is
+.Dv CLOCK_REALTIME ,
+then the timer will be cancelled and its file descriptor will become
+immediately readable if the system realtime clock is set using
+.Xr clock_settime 2
+or
+.Xr settimeofday 2 .
+If the
+.Nm
+object's clock ID is not
+.Dv CLOCK_REALTIME
+this flag is ignored.
+.El
+.Pp
+If the
+.Va it_interval
+of the
+.Fa tim
+argument is non-zero, then the timer reloads upon expiration.
+.Pp
+The
+.Fn timerfd_gettime
+system call returns the current settings of the
+.Nm
+object in the
+.Fa tim
+argument.
+.\"
+.\"
+.Sh RETURN VALUES
+The
+.Fn timerfd_create
+system call returns\~\-1 if an error occurs,
+otherwise the return value is a descriptor representing the
+.Nm
+object.
+.Pp
+.Rv -std timerfd_gettime timerfd_settime
+.\"
+.\"
+.Sh ERRORS
+The
+.Fn timerfd
+system call fails if:
+.Bl -tag -width Er
+.It Bq Er EINVAL
+Flags other than
+.Dv TFD_CLOEXEC
+and
+.Dv TFD_NONBLOCK
+are set in the
+.Fa flags
+argument.
+.It Bq Er EINVAL
+The
+.Fa clockid
+argument was something other than
+.Dv CLOCK_REALTIME
+or
+.Dv CLOCK_MONOTONIC .
+.It Bq Er EMFILE
+The per-process descriptor table is full.
+.It Bq Er ENFILE
+The system file table is full.
+.El
+.Pp
+The
+.Fn timerfd_gettime
+system call fails if:
+.Bl -tag -width Er
+.It Bq Er EBADF
+The argument
+.Fa fd
+is not a valid file descriptor.
+.It Bq Er EFAULT
+The
+.Fa tim
+argument points outside the allocated address space.
+.It Bq Er EINVAL
+The argument
+.Fa fd
+does not refer to a
+.Nm timerfd
+object.
+.El
+.Pp
+The
+.Fn timerfd_settime
+system call fails if:
+.Bl -tag -width Er
+.It Bq Er EBADF
+The argument
+.Fa fd
+is not a valid file descriptor.
+.It Bq Er EFAULT
+The
+.Fa tim
+or
+.Fa otim
+arguments point outside the allocated address space.
+.It Bq Er EINVAL
+The argument
+.Fa fd
+does not refer to a
+.Nm timerfd
+object.
+.It Bq Er EINVAL
+Bits other than the defined
+.Dv TFD_TIMER_ABSTIME
+and
+.Dv TFD_TIMER_CANCEL_ON_SET
+bits are set in the
+.Fa flags
+argument.
+.It Bq Er EINVAL
+A nanosecond field in the
+.Fa tim
+argument specified a value less than zero or greater than or equal
+to\~10^9.
+.El
+.Pp
+A read from a
+.Nm
+object fails if:
+.Bl -tag -width Er
+.It Bq Er EAGAIN
+The value of the
+.Nm
+object's expiration counter is
+.Dv 0
+and the
+.Nm
+object is set for non-blocking I/O.
+.It Bq Er ECANCELED
+The
+.Nm
+object was created with the clock ID
+.Dv CLOCK_REALTIME ,
+was configured with the
+.Dv TFD_TIMER_CANCEL_ON_SET
+flag, and the system realtime clock was changed with
+.Xr clock_settime 2
+or
+.Xr settimeofday 2 .
+.It Bq Er EINVAL
+The size of the read buffer is less than 8 bytes
+.Pq the size required to hold an unsigned 64-bit integer .
+.El
+.\"
+.\"
+.Sh SEE ALSO
+.Xr clock_settime 2 ,
+.Xr close 2 ,
+.Xr kevent 2 ,
+.Xr open 2 ,
+.Xr poll 2 ,
+.Xr read 2 ,
+.Xr select 2 ,
+.Xr settimeofday 2 ,
+.Xr timer_create 2 ,
+.Xr timer_gettime 2 ,
+.Xr timer_settime 2
+.\"
+.\"
+.Sh HISTORY
+The
+.Nm
+interface first appeared in
+.Nx 10 .
+It is compatible with the
+.Nm
+interface that appeared in Linux 2.6.25.