1NANOSLEEP(P)               POSIX Programmer's Manual              NANOSLEEP(P)
2
3
4

NAME

6       nanosleep - high resolution sleep (REALTIME)
7

SYNOPSIS

9       #include <time.h>
10
11       int nanosleep(const struct timespec *rqtp, struct timespec *rmtp);
12
13

DESCRIPTION

15       The nanosleep() function shall cause the current thread to be suspended
16       from execution until either the time interval  specified  by  the  rqtp
17       argument  has  elapsed  or a signal is delivered to the calling thread,
18       and its action is to invoke a signal-catching function or to  terminate
19       the  process.  The suspension time may be longer than requested because
20       the argument value is rounded up to an integer multiple  of  the  sleep
21       resolution  or  because of the scheduling of other activity by the sys‐
22       tem. But, except for the case of being interrupted  by  a  signal,  the
23       suspension  time  shall not be less than the time specified by rqtp, as
24       measured by the system clock CLOCK_REALTIME.
25
26       The use of the nanosleep() function has no  effect  on  the  action  or
27       blockage of any signal.
28

RETURN VALUE

30       If  the  nanosleep()  function  returns  because the requested time has
31       elapsed, its return value shall be zero.
32
33       If the nanosleep() function returns because it has been interrupted  by
34       a  signal,  it shall return a value of -1 and set errno to indicate the
35       interruption. If the rmtp argument is non-NULL, the timespec  structure
36       referenced  by it is updated to contain the amount of time remaining in
37       the interval (the requested time minus the time actually slept). If the
38       rmtp argument is NULL, the remaining time is not returned.
39
40       If  nanosleep()  fails,  it shall return a value of -1 and set errno to
41       indicate the error.
42

ERRORS

44       The nanosleep() function shall fail if:
45
46       EINTR  The nanosleep() function was interrupted by a signal.
47
48       EINVAL The rqtp argument specified a nanosecond value less than zero or
49              greater than or equal to 1000 million.
50
51
52       The following sections are informative.
53

EXAMPLES

55       None.
56

APPLICATION USAGE

58       None.
59

RATIONALE

61       It is common to suspend execution of a process for an interval in order
62       to poll the status of a non-interrupting function. A  large  number  of
63       actual  needs  can  be met with a simple extension to sleep() that pro‐
64       vides finer resolution.
65
66       In the POSIX.1-1990 standard and SVR4, it is possible to implement such
67       a  routine, but the frequency of wakeup is limited by the resolution of
68       the alarm() and sleep() functions. In 4.3 BSD, it is possible to  write
69       such  a routine using no static storage and reserving no system facili‐
70       ties. Although it is possible to write a function  with  similar  func‐
71       tionality  to  sleep()  using the remainder of the timer_*() functions,
72       such a function requires the use of signals and the reservation of some
73       signal  number.  This  volume  of  IEEE Std 1003.1-2001  requires  that
74       nanosleep() be non-intrusive of the signals function.
75
76       The nanosleep() function shall return a value of 0 on success and -1 on
77       failure  or if interrupted. This latter case is different from sleep().
78       This was done because the remaining time is returned  via  an  argument
79       structure pointer, rmtp, instead of as the return value.
80

FUTURE DIRECTIONS

82       None.
83

SEE ALSO

85       sleep() , the Base Definitions volume of IEEE Std 1003.1-2001, <time.h>
86
88       Portions  of  this text are reprinted and reproduced in electronic form
89       from IEEE Std 1003.1, 2003 Edition, Standard for Information Technology
90       --  Portable  Operating  System  Interface (POSIX), The Open Group Base
91       Specifications Issue 6, Copyright (C) 2001-2003  by  the  Institute  of
92       Electrical  and  Electronics  Engineers, Inc and The Open Group. In the
93       event of any discrepancy between this version and the original IEEE and
94       The  Open Group Standard, the original IEEE and The Open Group Standard
95       is the referee document. The original Standard can be  obtained  online
96       at http://www.opengroup.org/unix/online.html .
97
98
99
100IEEE/The Open Group                  2003                         NANOSLEEP(P)
Impressum