| NANOSLEEP(2) | System Calls Manual | NANOSLEEP(2) |
nanosleep,
clock_nanosleep — high
resolution sleep
Standard C Library (libc, -lc)
#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);
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).
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.
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]EINTR]nanosleep was interrupted by the delivery of a
signal.EINVAL]ENOSYS]nanosleep is not supported by this
implementation.ENOTSUP]clock_nanosleep(), the clock specified in the
clock_id argument is not supported.The nanosleep() function conforms to
IEEE Std 1003.1b-1993 (“POSIX.1b”).
The clock_nanosleep() function conforms to
IEEE Std 1003.1-2008 (“POSIX.1”).
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.
| November 11, 2016 | NetBSD 11.0 |