adjtimex — tune kernel clock


#include <sys/timex.h>
int adjtimex( struct timex *buf);


Linux uses David L. Mills' clock adjustment algorithm (see RFC 1305). The system call adjtimex() reads and optionally sets adjustment parameters for this algorithm. It takes a pointer to a timex structure, updates kernel parameters from field values, and returns the same structure with current kernel values. This structure is declared as follows:

struct timex {
  int   modes;
/* mode selector */
  long   offset;
/* time offset (usec) */
  long   freq;
/* frequency offset (scaled ppm) */
  long   maxerror;
/* maximum error (usec) */
  long   esterror;
/* estimated error (usec) */
  int   status;
/* clock command/status */
  long   constant;
/* pll time constant */
  long   precision;
/* clock precision (usec) (read-only) */
  long   tolerance;
/* clock frequency tolerance (ppm)
(read-only) */
  struct timeval   time;
/* current time (read-only) */
  long   tick;
/* usecs between clock ticks */

The modes field determines which parameters, if any, to set. It may contain a bitwise-or combination of zero or more of the following bits:

#define ADJ_OFFSET            0x0001 /* time offset */
#define ADJ_FREQUENCY         0x0002 /* frequency offset */
#define ADJ_MAXERROR          0x0004 /* maximum time error */
#define ADJ_ESTERROR          0x0008 /* estimated time error */
#define ADJ_STATUS            0x0010 /* clock status */
#define ADJ_TIMECONST         0x0020 /* pll time constant */
#define ADJ_TICK              0x4000 /* tick value */
#define ADJ_OFFSET_SINGLESHOT 0x8001 /* old-fashioned adjtime() */

Ordinary users are restricted to a zero value for mode. Only the superuser may set any parameters.


On success, adjtimex() returns the clock state:

#define TIME_OK   0 /* clock synchronized */
#define TIME_INS  1 /* insert leap second */
#define TIME_DEL  2 /* delete leap second */
#define TIME_OOP  3 /* leap second in progress */
#define TIME_WAIT 4 /* leap second has occurred */
#define TIME_BAD  5 /* clock not synchronized */

On failure, adjtimex() returns −1 and sets errno.



buf does not point to writable memory.


An attempt is made to set buf.offset to a value outside the range −131071 to +131071, or to set buf.status to a value other than those listed above, or to set buf.tick to a value outside the range 900000/HZ to 1100000/HZ, where HZ is the system timer interrupt frequency.


buf.mode is nonzero and the caller does not have sufficient privilege. Under Linux the CAP_SYS_TIME capability is required.


adjtimex() is Linux-specific and should not be used in programs intended to be portable. See adjtime(3) for a more portable, but less flexible, method of adjusting the system clock.


settimeofday(2), adjtime(3), capabilities(7), time(7)


This page is part of release 3.52 of the Linux man-pages project. A description of the project, and information about reporting bugs, can be found at−pages/.

  Copyright (c) 1995 Michael Chastain (, 15 April 1995.

This is free documentation; you can redistribute it and/or
modify it under the terms of the GNU General Public License as
published by the Free Software Foundation; either version 2 of
the License, or (at your option) any later version.

The GNU General Public License's references to "object code"
and "executables" are to be interpreted as the output of any
document formatting or typesetting system, including
intermediate and printed output.

This manual is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
GNU General Public License for more details.

You should have received a copy of the GNU General Public
License along with this manual; if not, see

Modified 1997-01-31 by Eric S. Raymond <>
Modified 1997-07-30 by Paul Slootman <>
Modified 2004-05-27 by Michael Kerrisk <>