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 p1003.1-2008.

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

The nanosleep() function first appeared in p1003.1b-93.

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