CLOCK_GETTIME(2) | System Calls Manual | CLOCK_GETTIME(2) |
clock_gettime
,
clock_settime
, clock_getres
— get/set/calibrate date and time
#include
<time.h>
int
clock_gettime
(clockid_t
clock_id, struct timespec
*tp);
int
clock_settime
(clockid_t
clock_id, const struct
timespec *tp);
int
clock_getres
(clockid_t
clock_id, struct timespec
*tp);
The
clock_gettime
()
and
clock_settime
()
functions allow the calling process to retrieve or set the value used by a
clock which is specified by clock_id.
clock_id can be a value from clock_getcpuclockid(3) or pthread_getcpuclockid(3) or one of five predefined values:
CLOCK_REALTIME
CLOCK_PROCESS_CPUTIME_ID
CLOCK_THREAD_CPUTIME_ID
CLOCK_MONOTONIC
CLOCK_UPTIME
The structure pointed to by tp is defined in
<sys/time.h>
as:
struct timespec { time_t tv_sec; /* seconds */ long tv_nsec; /* and nanoseconds */ };
Only the CLOCK_REALTIME
clock can be set,
and only the superuser may do so. If the system securelevel is greater than
1 (see init(8)), the time may
only be advanced. This limitation is imposed to prevent a malicious
superuser from setting arbitrary time stamps on files. The system time can
still be adjusted backwards using the
adjtime(2) system call even
when the system is secure.
The resolution (granularity) of a clock is
returned by the
clock_getres
()
call. This value is placed in a (non-null) *tp.
Upon successful completion, the value 0 is returned; otherwise the value -1 is returned and the global variable errno is set to indicate the error.
clock_gettime
(),
clock_settime
(), and
clock_getres
() will fail if:
In addition, clock_settime
() may return
the following errors:
date(1), adjtime(2), getitimer(2), gettimeofday(2), clock_getcpuclockid(3), ctime(3), pthread_getcpuclockid(3)
The clock_getres
(),
clock_gettime
(), and
clock_settime
() functions conform to
IEEE Std 1003.1-2008 (“POSIX.1”).
The CLOCK_UPTIME
clock is an extension to
that.
The CLOCK_PROCESS_CPUTIME_ID
and
CLOCK_THREAD_CPUTIME_ID
clocks appeared in
OpenBSD 5.4. The
CLOCK_UPTIME
clock first appeared in
FreeBSD 7.0 and was added to
OpenBSD in OpenBSD 5.5.
September 10, 2015 | OpenBSD-6.1 |