Provided by: manpages-posix-dev_2017a-2_all bug

PROLOG

       This  manual  page  is part of the POSIX Programmer's Manual.  The Linux implementation of this interface
       may differ (consult the corresponding Linux manual page for details of Linux behavior), or the  interface
       may not be implemented on Linux.

NAME

       clock_getres, clock_gettime, clock_settime — clock and timer functions

SYNOPSIS

       #include <time.h>

       int clock_getres(clockid_t clock_id, struct timespec *res);
       int clock_gettime(clockid_t clock_id, struct timespec *tp);
       int clock_settime(clockid_t clock_id, const struct timespec *tp);

DESCRIPTION

       The   clock_getres()   function  shall  return  the  resolution  of  any  clock.  Clock  resolutions  are
       implementation-defined and cannot be set by a process. If the argument res is not NULL, the resolution of
       the specified clock shall be stored in the location pointed to  by  res.   If  res  is  NULL,  the  clock
       resolution  is  not  returned. If the time argument of clock_settime() is not a multiple of res, then the
       value is truncated to a multiple of res.

       The clock_gettime() function shall return the current value tp for the specified clock, clock_id.

       The clock_settime() function shall set the specified clock, clock_id, to the value specified by tp.  Time
       values that are between two consecutive non-negative integer multiples of the resolution of the specified
       clock shall be truncated down to the smaller multiple of the resolution.

       A clock may be system-wide (that is, visible to all processes) or per-process  (measuring  time  that  is
       meaningful  only  within  a  process).  All implementations shall support a clock_id of CLOCK_REALTIME as
       defined in <time.h>.  This clock represents the clock measuring real  time  for  the  system.   For  this
       clock,  the  values  returned by clock_gettime() and specified by clock_settime() represent the amount of
       time (in seconds and nanoseconds) since the Epoch. An implementation may also support additional  clocks.
       The interpretation of time values for these clocks is unspecified.

       If  the value of the CLOCK_REALTIME clock is set via clock_settime(), the new value of the clock shall be
       used to determine the time of expiration for absolute time services based upon the CLOCK_REALTIME  clock.
       This  applies  to  the time at which armed absolute timers expire.  If the absolute time requested at the
       invocation of such a time service is before the new value of the clock, the  time  service  shall  expire
       immediately as if the clock had reached the requested time normally.

       Setting  the  value  of the CLOCK_REALTIME clock via clock_settime() shall have no effect on threads that
       are blocked waiting for a relative  time  service  based  upon  this  clock,  including  the  nanosleep()
       function;  nor  on  the  expiration  of  relative  timers based upon this clock. Consequently, these time
       services shall expire when the requested relative interval elapses, independently of the new or old value
       of the clock.

       If  the  Monotonic  Clock  option  is  supported,  all  implementations  shall  support  a  clock_id   of
       CLOCK_MONOTONIC  defined in <time.h>.  This clock represents the monotonic clock for the system. For this
       clock, the value returned by clock_gettime() represents the amount of time (in seconds  and  nanoseconds)
       since an unspecified point in the past (for example, system start-up time, or the Epoch). This point does
       not  change  after  system  start-up  time.  The  value  of  the  CLOCK_MONOTONIC clock cannot be set via
       clock_settime().  This function shall fail if it is invoked with a clock_id argument of CLOCK_MONOTONIC.

       The effect of setting a clock via clock_settime() on armed per-process timers  associated  with  a  clock
       other than CLOCK_REALTIME is implementation-defined.

       If  the value of the CLOCK_REALTIME clock is set via clock_settime(), the new value of the clock shall be
       used to determine  the  time  at  which  the  system  shall  awaken  a  thread  blocked  on  an  absolute
       clock_nanosleep()  call  based  upon  the  CLOCK_REALTIME  clock.  If  the absolute time requested at the
       invocation of such a time service is before the new value of the clock, the call shall return immediately
       as if the clock had reached the requested time normally.

       Setting the value of the CLOCK_REALTIME clock via clock_settime() shall have no effect on any thread that
       is blocked on a relative clock_nanosleep() call. Consequently, the call shall return when  the  requested
       relative interval elapses, independently of the new or old value of the clock.

       Appropriate privileges to set a particular clock are implementation-defined.

       If  _POSIX_CPUTIME  is  defined,  implementations  shall  support  clock  ID  values obtained by invoking
       clock_getcpuclockid(), which represent the CPU-time clock of a given process. Implementations shall  also
       support  the special clockid_t value CLOCK_PROCESS_CPUTIME_ID, which represents the CPU-time clock of the
       calling process when invoking one of the clock_*() or timer_*()  functions.  For  these  clock  IDs,  the
       values  returned  by  clock_gettime()  and specified by clock_settime() represent the amount of execution
       time of the process associated with the clock. Changing the value of a CPU-time clock via clock_settime()
       shall have no effect on the behavior of the sporadic server scheduling policy (see Scheduling Policies).

       If _POSIX_THREAD_CPUTIME is defined, implementations shall support clock ID values obtained  by  invoking
       pthread_getcpuclockid(), which represent the CPU-time clock of a given thread. Implementations shall also
       support  the  special clockid_t value CLOCK_THREAD_CPUTIME_ID, which represents the CPU-time clock of the
       calling thread when invoking one of the clock_*() or timer_*() functions. For these clock IDs, the values
       returned by clock_gettime() and specified by clock_settime() shall represent the amount of execution time
       of the thread associated with the clock. Changing the value of a CPU-time clock via clock_settime() shall
       have no effect on the behavior of the sporadic server scheduling policy (see Scheduling Policies).

RETURN VALUE

       A return value of 0 shall indicate that the call succeeded. A return value of -1 shall indicate  that  an
       error occurred, and errno shall be set to indicate the error.

ERRORS

       The clock_getres(), clock_gettime(), and clock_settime() functions shall fail if:

       EINVAL The clock_id argument does not specify a known clock.

       The clock_gettime() function shall fail if:

       EOVERFLOW
              The number of seconds will not fit in an object of type time_t.

       The clock_settime() function shall fail if:

       EINVAL The tp argument to clock_settime() is outside the range for the given clock ID.

       EINVAL The  tp  argument  specified  a  nanosecond  value less than zero or greater than or equal to 1000
              million.

       EINVAL The value of the clock_id argument is CLOCK_MONOTONIC.

       The clock_settime() function may fail if:

       EPERM  The requesting process does not have appropriate privileges to set the specified clock.

       The following sections are informative.

EXAMPLES

       None.

APPLICATION USAGE

       Note that the absolute value of the monotonic clock is meaningless (because its origin is arbitrary), and
       thus there is no need to set it.  Furthermore, realtime applications can rely on the fact that the  value
       of  this  clock  is  never  set  and, therefore, that time intervals measured with this clock will not be
       affected by calls to clock_settime().

RATIONALE

       None.

FUTURE DIRECTIONS

       None.

SEE ALSO

       Scheduling Policies, clock_getcpuclockid(), clock_nanosleep(), ctime(), mq_receive(), mq_send(),
       nanosleep(), pthread_mutex_timedlock(), sem_timedwait(), time(), timer_create(), timer_getoverrun()

       The Base Definitions volume of POSIX.1‐2017, <time.h>

COPYRIGHT

       Portions of this text are reprinted and reproduced in electronic form from IEEE Std 1003.1-2017, Standard
       for Information  Technology  --  Portable  Operating  System  Interface  (POSIX),  The  Open  Group  Base
       Specifications  Issue  7, 2018 Edition, Copyright (C) 2018 by the Institute of Electrical and Electronics
       Engineers, Inc and The Open Group.  In the event of any discrepancy between this version and the original
       IEEE and The Open Group Standard, the original IEEE and The Open Group Standard is the referee  document.
       The original Standard can be obtained online at http://www.opengroup.org/unix/online.html .

       Any  typographical  or formatting errors that appear in this page are most likely to have been introduced
       during  the  conversion  of  the  source  files  to  man  page  format.  To  report  such   errors,   see
       https://www.kernel.org/doc/man-pages/reporting_bugs.html .

IEEE/The Open Group                                   2017                                  CLOCK_GETRES(3POSIX)