NANOSLEEP(2)

NANOSLEEP(2) | System Calls Manual | NANOSLEEP(2)

# 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.

November 11, 2016 | NetBSD 8.0