NAME
nanosleep —
high resolution
sleep
LIBRARY
Standard C Library (libc, -lc)
SYNOPSIS
#include <time.h>
int
clock_nanosleep(
clockid_t
clock_id,
int flags,
const struct timespec
*rqtp,
struct timespec
*rmtp);
int
nanosleep(
const
struct timespec *rqtp,
struct timespec *rmtp);
DESCRIPTION
If the
TIMER_ABSTIME
flag is not set in the
flags argument, then
clock_nanosleep()
suspends execution of the calling thread until either the number of seconds
and nanoseconds specified in the
rqtp argument have
elapsed using the clock in the
clock_id argument, or a
signal is delivered to the calling process and its action is to invoke a
signal catching function or to terminate the process.
If the
TIMER_ABSTIME
flag is set in the
flags argument, then
clock_nanosleep()
suspends execution of the calling thread until either the value of the clock
specified in the
clock_id argument reaches the value of
the
rqtp argument in seconds and nanoseconds, or a
signal is delivered to the calling process and its action is to invoke a
signal catching function or to terminate the process.
The suspension time may be longer than requested due to the scheduling of other
activity by the system.
The
nanosleep() function behaves like
clock_nanosleep() with the
clock_id
argument equal to
CLOCK_MONOTONIC
and the
flags argument having
TIMER_ABSTIME
not set.
The
struct timespec is described in
timespec(3). The
clock_id specified is the time source, which is
described in
clock_gettime(2).
RETURN VALUES
If the
clock_nanosleep() or the
nanosleep()
functions return because the requested time has elapsed, the value returned
will be zero.
If the
clock_nanosleep() or the
nanosleep()
functions return due to the delivery of a signal, then
clock_nanosleep() will return directly the error number, and
nanosleep() will return -1, and the global variable
errno will be set to indicate the interruption. If
rmtp is non-
NULL
, the timespec
structure it references is updated to contain the unslept amount (the request
time minus the time actually slept), unless it is called from
clock_nanosleep() with a
flags
argument of
TIMER_ABSTIME
. In that case, the
rmtp argument is left unmodified.
ERRORS
If any of the following conditions occur, the
nanosleep()
function shall return -1 and set
errno to the
corresponding value, and the
clock_nanosleep() function
shall return the error number directly.
-
-
- [
EFAULT
]
- Either rqtp or
rmtp points to memory that is not a valid part of
the process address space.
-
-
- [
EINTR
]
- nanosleep was interrupted by the delivery
of a signal.
-
-
- [
EINVAL
]
- rqtp specified a nanosecond value
less than zero or greater than 1000 million.
-
-
- [
ENOSYS
]
- nanosleep is not supported by this
implementation.
-
-
- [
ENOTSUP
]
- for clock_nanosleep(), the clock
specified in the clock_id argument is not
supported.
SEE ALSO
clock_gettime(2),
sleep(3),
timespec(3)
STANDARDS
The
nanosleep() function conforms to
IEEE Std
1003.1b-1993 (“POSIX.1b”). The
clock_nanosleep() function conforms to.
BUGS
The
NetBSD kernel is not tickless, so the maximum sleep
resolution is determined by the value of
HZ
which is
by default
100
in most architectures. This means that
a request to sleep for less than
10ms
(1 /
HZ
seconds), is rounded up to that.