nanosleep - pause execution for a specified time


SYNOPSIS

       #include <time.h>

       int  nanosleep(const struct timespec *req, struct timespec
       *rem);


DESCRIPTION

       nanosleep delays the execution of the program for at least
       the  time specified in *req.  The function can return ear­
       lier if a signal has been delivered  to  the  process.  In
       this  case, it returns -1, sets errno to EINTR, and writes
       the remaining time into the structure pointed  to  by  rem
       unless rem is NULL.  The value of *rem can then be used to
       call nanosleep again and complete the specified pause.

       The structure timespec is used  to  specify  intervals  of
       time   with  nanosecond  precision.  It  is  specified  in
       <time.h> and has the form

              struct timespec
              {
                      time_t  tv_sec;         /* seconds */
                      long    tv_nsec;        /* nanoseconds */
              };

       The value of the nanoseconds field must be in the range  0
       to 999 999 999.

       Compared  to  sleep(3)  and  usleep(3),  nanosleep has the
       advantage of not affecting any signals, it is standardized
       by  POSIX,  it  provides  higher timing resolution, and it
       allows to continue a sleep that has been interrupted by  a
       signal more easily.


ERRORS

       In  case  of  an  error or exception, the nanosleep system
       call returns -1 instead of 0 and sets errno to one of  the
       following values:

       EINTR  The  pause  has  been  interrupted by a non-blocked
              signal that  was  delivered  to  the  process.  The
              remaining  sleep time has been written into *rem so
              that the process can easily  call  nanosleep  again
              and continue with the pause.

       EINVAL The value in the tv_nsec field was not in the range
              0 to 999 999 999 or tv_sec was negative.


BUGS

       The current implementation of nanosleep is  based  on  the
       Therefore, nanosleep pauses always for at least the speci­
       fied time, however it can take up to  10  ms  longer  than
       specified  until  the  process becomes runnable again. For
       the same reason, the value returned in case of a delivered
       signal  in *rem is usually rounded to the next larger mul­
       tiple of 1/HZ s.

       As some applications  require  much  more  precise  pauses
       (e.g.,  in  order to control some time-critical hardware),
       nanosleep is also capable of short high-precision  pauses.
       If  the process is scheduled under a real-time policy like
       SCHED_FIFO or SCHED_RR, then pauses of up to 2 ms will  be
       performed as busy waits with microsecond precision.


CONFORMING TO

       POSIX.1b (formerly POSIX.4).


SEE ALSO

       sleep(3),   usleep(3),  sched_setscheduler(2),  timer_cre­
       ate(2)