Seth Woolley's Man Viewer

nanosleep(2) - nanosleep, nanosleep - pause execution for a specified time - man 2 nanosleep

([section] manual, -k keyword, -K [section] search, -f whatis)
man plain no title

NANOSLEEP(2)               Linux Programmer's Manual              NANOSLEEP(2)



NAME
       nanosleep - pause execution for a specified time(1,2,n)

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(1,2,n)
       specified in(1,8) *req.  The function can return earlier  if(3,n)  a  signal(2,7)  has
       been  delivered to the process. In this case, it returns -1, sets errno
       to EINTR, and writes the remaining time(1,2,n) 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(1,2,n)  with
       nanosecond precision. It is specified in(1,8) <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(1,8) the range 0 to 999999999.

       Compared to sleep(1,3)(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(1,3)  that  has  been
       interrupted by a signal(2,7) more easily.

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

       EFAULT Problem with copying information from user space.

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

       EINVAL The  value  in(1,8)  the  tv_nsec  field  was  not  in(1,8) the range 0 to
              999999999 or tv_sec was negative.

BUGS
       The current implementation of nanosleep is based on the  normal  kernel
       timer  mechanism,  which  has  a  resolution  of  1/HZ s (i.e, 10 ms on
       Linux/i386 and  1 ms  on  Linux/Alpha).   Therefore,  nanosleep  pauses
       always for at least the specified time(1,2,n), 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(1,8) case of a delivered signal(2,7) in(1,8) *rem
       is usually rounded to the next larger multiple of 1/HZ s.


   Old behaviour
       In order to support applications requiring  much  more  precise  pauses
       (e.g.,  in(1,8)  order  to  control  some time-critical hardware), nanosleep
       would handle pauses of up to 2 ms by busy waiting with microsecond pre-
       cision  when  called  from a process scheduled under a real-time policy
       like SCHED_FIFO or SCHED_RR.  This special  extension  was  removed  in(1,8)
       kernel  2.5.39,  hence is still present in(1,8) current 2.4 kernels, but not
       in(1,8) 2.6 kernels.

CONFORMING TO
       POSIX.1b (formerly POSIX.4).

SEE ALSO
       sched_setscheduler(2), timer_create(2), sleep(1,3)(3), usleep(3)



Linux 2.6.9                       2004-10-24                      NANOSLEEP(2)

References for this manual (incoming links)