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

# NAME

`nanosleep` — high resolution sleep

# SYNOPSIS

`#include <time.h>`

int
`nanosleep`(const struct timespec *timeout, struct timespec *remainder);

# DESCRIPTION

The `nanosleep`() function suspends execution of the calling thread for at least the given timeout. Delivery of an unmasked signal terminates this sleep early, even if `SA_RESTART` is set with sigaction(2) for the interrupting signal.

# RETURN VALUES

If `nanosleep`() sleeps the full timeout without interruption, it returns 0. Unless remainder is `NULL`, it is set to zero.

If `nanosleep`() is interrupted by a signal, it returns -1 and the global variable errno is set to `EINTR`. Unless remainder is `NULL`, it is set to the unslept portion of the timeout.

Otherwise, `nanosleep`() returns -1 and the global variable errno is set to indicate the error.

# ERRORS

`nanosleep`() will fail if:

[`EINTR`]
  The call is interrupted by the delivery of a signal.
[`EINVAL`]
  timeout specifies a nanosecond value less than zero or greater than or equal to one billion, or a second value less than zero.
[`EFAULT`]
  timeout points to memory that is not a valid part of the process address space.
[`EFAULT`]
  remainder is not `NULL` and points to memory that is not a valid part of the process address space.

# SEE ALSO

sleep(1), sigaction(2), sleep(3)

# STANDARDS

The `nanosleep`() function conforms to IEEE Std 1003.1-2008 (“POSIX.1”).

# HISTORY

The predecessor of this system call, `sleep`(), first appeared in Version 2 AT&T UNIX. It was removed in Version 7 AT&T UNIX and replaced with a C library implementation based on alarm(3) and signal(3).

The `nanosleep`() function first appeared in IEEE Std 1003.1b-1993 (“POSIX.1b”).

This implementation of `nanosleep`() first appeared in NetBSD 1.3 and was ported to OpenBSD 2.1.

March 31, 2022 | Debian