NANOSLEEP(2)

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

# NAME

`nanosleep`, `clock_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 IEEE Std 1003.1-2008 (“POSIX.1”).

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