|
PROLOG | NAME | SYNOPSIS | DESCRIPTION | RETURN VALUE | ERRORS | EXAMPLES | APPLICATION USAGE | RATIONALE | FUTURE DIRECTIONS | SEE ALSO | COPYRIGHT |
|
CLOCK_GETRES(3P) POSIX Programmer's Manual CLOCK_GETRES(3P)
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.
clock_getres, clock_gettime, clock_settime — clock and timer
functions
#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);
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).
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.
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.
None.
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().
None.
None.
Scheduling Policies, clock_getcpuclockid(3p), clock_nanosleep(3p),
ctime(3p), mq_receive(3p), mq_send(3p), nanosleep(3p),
pthread_mutex_timedlock(3p), sem_timedwait(3p), time(3p),
timer_create(3p), timer_getoverrun(3p)
The Base Definitions volume of POSIX.1‐2008, time.h(0p)
Portions of this text are reprinted and reproduced in electronic form
from IEEE Std 1003.1, 2013 Edition, Standard for Information
Technology -- Portable Operating System Interface (POSIX), The Open
Group Base Specifications Issue 7, Copyright (C) 2013 by the
Institute of Electrical and Electronics Engineers, Inc and The Open
Group. (This is POSIX.1-2008 with the 2013 Technical Corrigendum 1
applied.) 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.unix.org/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 2013 CLOCK_GETRES(3P)
Pages that refer to this page: time.h(0p), clock_getcpuclockid(3p), clock_nanosleep(3p), clock_settime(3p), gettimeofday(3p), posix_trace_create(3p), pthread_getcpuclockid(3p), time(3p), timer_create(3p), timer_getoverrun(3p)