clock_gettime

CLOCK_GETRES(3P)           POSIX Programmer's Manual          CLOCK_GETRES(3P)



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
       (REALTIME)

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 realtime clock 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.

       The appropriate privilege to set a particular clock is 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_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 the appropriate privilege
              to set the specified clock.


       The following sections are informative.

EXAMPLES
       None.

APPLICATION USAGE
       These functions are part of the Timers option and need not be available
       on all implementations.

       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
       clock_getcpuclockid(), clock_nanosleep(), ctime(), mq_timedreceive(),
       mq_timedsend(), nanosleep(), pthread_mutex_timedlock(),
       sem_timedwait(), time(), timer_create(), timer_getoverrun(), the Base
       Definitions volume of IEEE Std 1003.1-2001, <time.h>

COPYRIGHT
       Portions of this text are reprinted and reproduced in electronic form
       from IEEE Std 1003.1, 2003 Edition, Standard for Information Technology
       -- Portable Operating System Interface (POSIX), The Open Group Base
       Specifications Issue 6, Copyright (C) 2001-2003 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 .



IEEE/The Open Group                  2003                     CLOCK_GETRES(3P)