# adjtime

## NAME



           adjtime - correct the time to synchronize the system clock
    


## LIBRARY



           Standard C library (_libc_ , _-lc_)
    


## SYNOPSIS



           **#include <sys/time.h>**
    
           **int adjtime(const struct timeval ***_delta_**, struct timeval ***_olddelta_**);**
    
       Feature Test Macro Requirements for glibc (see
       feature_test_macros(7)):
    
           **adjtime**():
               Since glibc 2.19:
                   _DEFAULT_SOURCE
               glibc 2.19 and earlier:
                   _BSD_SOURCE
    


## DESCRIPTION



           The **adjtime**() function gradually adjusts the system clock (as
           returned by gettimeofday(2)).  The amount of time by which the
           clock is to be adjusted is specified in the structure pointed to
           by _delta_.  This structure has the following form:
    
               struct timeval {
                   time_t      tv_sec;     /* seconds */
                   suseconds_t tv_usec;    /* microseconds */
               };
    
           If the adjustment in _delta_ is positive, then the system clock is
           speeded up by some small percentage (i.e., by adding a small
           amount of time to the clock value in each second) until the
           adjustment has been completed.  If the adjustment in _delta_ is
           negative, then the clock is slowed down in a similar fashion.
    
           If a clock adjustment from an earlier **adjtime**() call is already in
           progress at the time of a later **adjtime**() call, and _delta_ is not
           NULL for the later call, then the earlier adjustment is stopped,
           but any already completed part of that adjustment is not undone.
    
           If _olddelta_ is not NULL, then the buffer that it points to is used
           to return the amount of time remaining from any previous
           adjustment that has not yet been completed.
    


## RETURN VALUE



           On success, **adjtime**() returns 0.  On failure, -1 is returned, and
           _errno_ is set to indicate the error.
    


## ERRORS



           **EINVAL** The adjustment in _delta_ is outside the permitted range.
    
           **EPERM** The caller does not have sufficient privilege to adjust the
                  time.  Under Linux, the **CAP_SYS_TIME** capability is
                  required.
    


## ATTRIBUTES



           For an explanation of the terms used in this section, see
           attributes(7).
           ┌──────────────────────────────────────┬───────────────┬─────────┐
           │ **Interface** │ **Attribute** │ **Value** │
           ├──────────────────────────────────────┼───────────────┼─────────┤
           │ **adjtime**()                            │ Thread safety │ MT-Safe │
           └──────────────────────────────────────┴───────────────┴─────────┘
    


## STANDARDS



           None.
    


## NOTES



           The adjustment that **adjtime**() makes to the clock is carried out in
           such a manner that the clock is always monotonically increasing.
           Using **adjtime**() to adjust the time prevents the problems that
           could be caused for certain applications (e.g., make(1)) by abrupt
           positive or negative jumps in the system time.
    
           **adjtime**() is intended to be used to make small adjustments to the
           system time.  Most systems impose a limit on the adjustment that
           can be specified in _delta_.  In the glibc implementation, _delta_
           must be less than or equal to (INT_MAX / 1000000 - 2) and greater
           than or equal to (INT_MIN / 1000000 + 2) (respectively 2145 and
           -2145 seconds on i386).
    


## BUGS



           A longstanding bug meant that if _delta_ was specified as NULL, no
           valid information about the outstanding clock adjustment was
           returned in _olddelta_.  (In this circumstance, **adjtime**() should
           return the outstanding clock adjustment, without changing it.)
           This bug is fixed on systems with glibc 2.8 or later and Linux
           kernel 2.6.26 or later.
    


* * *