NAME
gettimeofday,
settimeofday —
get or set the time of day
SYNOPSIS
#include
<sys/time.h>
int
gettimeofday(struct
timeval *now, struct
timezone *tz);
int
settimeofday(const
struct timeval *now,
const struct timezone
*tz);
DESCRIPTION
The
gettimeofday()
function writes the absolute value of the system's Coordinated Universal
Time (UTC) clock to now unless
now is NULL.
The UTC clock's absolute value is the time
elapsed since Jan 1 1970 00:00:00 +0000 (the Epoch). The clock normally
advances continuously, though it may jump discontinuously if a process calls
settimeofday()
or clock_settime(2). For this reason,
gettimeofday() is not generally suitable for
measuring elapsed time. Whenever possible, use
clock_gettime(2) to measure elapsed time with one of the system's
monotonic clocks instead.
The
settimeofday()
function sets the system's UTC clock to the absolute value
now unless now is
NULL. Only the superuser may set the clock. If the
system securelevel(7) is 2 or greater, the clock may only be advanced. This
limitation prevents a malicious superuser from setting arbitrary timestamps
on files. Setting the clock cancels any ongoing
adjtime(2) adjustment.
The structure pointed to by now is defined
in <sys/time.h> as:
struct timeval {
time_t tv_sec; /* seconds */
suseconds_t tv_usec; /* and microseconds */
};
The tz argument is
historical: the system no longer maintains timezone information in the
kernel. The tz argument should always be
NULL.
gettimeofday()
zeroes tz if it is not NULL.
settimeofday() ignores the contents of
tz if it is not NULL.
RETURN VALUES
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.
ERRORS
gettimeofday() and
settimeofday() will fail if:
- [
EFAULT] - now or tz are not
NULLand reference invalid memory.
settimeofday() will also fail if:
- [
EINVAL] - now specifies a microsecond value less than zero or greater than or equal to one million.
- [
EPERM] - The caller is not the superuser.
- [
EPERM] - The system securelevel(7) is 2 or greater and now specifies a time in the past.
SEE ALSO
date(1), adjtime(2), clock_gettime(2), getitimer(2), ctime(3), time(3), timeradd(3)
STANDARDS
The gettimeofday() function conforms to
IEEE Std 1003.1-2008 (“POSIX.1”).
The settimeofday() function is
non-standard, though many systems offer it.
HISTORY
As predecessors of these functions, former system calls
time() and stime() first
appeared in Version 1 AT&T UNIX, and
ftime() first appeared in
Version 7 AT&T UNIX. The
gettimeofday() and
settimeofday() system calls first appeared in
4.1cBSD.
CAVEATS
Setting the time with settimeofday() is
dangerous; if possible use
adjtime(2) instead. Many daemon programming techniques utilize
time-delta techniques using the results from
gettimeofday() instead of from
clock_gettime(2) on the CLOCK_MONOTONIC
clock. Time jumps can cause these programs to malfunction in unexpected
ways. If the time must be set, consider rebooting the machine for
safety.