NAME
nanosleep() — high resolution sleep
SYNOPSIS
#include <time.h>
int nanosleep(
const struct timespec *rqtp,
struct timespec *rmtp
);
DESCRIPTION
The
nanosleep()
function causes the current thread to be suspended from execution until
either the time interval specified by the
rqtp
argument has elapsed,
or a signal is delivered to the calling thread and its action is to invoke
a signal-catching function or to terminate the process.
The suspension time
may be longer than that requested because the
argument value is rounded up to
an integer multiple of the sleep resolution
or because of the scheduling of
other activity by the system.
However, with the exception of the case of being interrupted
by a signal, the suspension time will not be less than the time specified by
rqtp,
as measured by the system clock,
CLOCK_REALTIME.
The use of the
nanosleep()
function has no effect on the action or blockage of any signal.
RETURN VALUE
If the
nanosleep()
function returns because the requested time has elapsed,
its return value is zero.
If the
nanosleep()
function returns because it has been interrupted by a signal, the function
returns a value of -1 and sets
errno
to indicate the interruption.
If the
rmtp
argument is non-NULL, the
timespec
structure referenced by it is updated to contain the amount of time
remaining in the interval
(the requested time minus the time actually slept).
If the
rmtp
argument is NULL, the remaining time is not returned.
If
nanosleep()
fails, it returns a value of -1 and sets
errno
to indicate the error.
ERRORS
If any of the following conditions occur, the
nanosleep()
function returns -1 and sets
errno
(see
errno(2))
to the corresponding value:
- EFAULT
The
rqtp
or
rmtp
arguments specify an invalid address.
- EINTR
nanosleep()
was interrupted by a signal.
- EINVAL
The
rqtp
argument specified a nanosecond value
less than zero or greater than or equal
to 1000 million.
- ENOSYS
The function
nanosleep()
is not supported by this implementation.
EXAMPLES
Suspend execution of the current thread for half a second:
#include <time.h>
#include <errno.h>
struct timespec interval, remainder;
interval.tv_sec = 0;
interval.tv_nsec = 500000000;
if (nanosleep(&interval, &remainder) == -1) {
if (errno == EINTR) {
(void)printf("nanosleep interrupted\n");
(void)printf("Remaining secs: %d\n", remainder.tv_sec);
(void)printf("Remaining nsecs: %d\n", remainder.tv_nsec);
}
else perror("nanosleep");
}
AUTHOR
nanosleep
was derived from the proposed IEEE POSIX P1003.4 Standard, Draft 14.
STANDARDS CONFORMANCE
nanosleep(): POSIX.4