.\" Hey Emacs! This file is -*- nroff -*- source. .\" .\" Copyright (c) 1995 Michael Chastain (mec@shell.portal.com), 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 .\" MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the .\" 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, write to the Free .\" Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, .\" USA. .\" .TH ADJTIMEX 2 "15 April 1995" "Linux 1.2.4" "Linux Programmer's Manual" .SH NAME adjtimex \- tune kernel clock .SH SYNOPSIS .B #include .sp .BI "int adjtimex(struct timex *" "buf" ");" .SH DESCRIPTION Linux uses David Mill's clock adjustment algorithm. .B adjtimex reads and optionally sets adjustment parameters for this algorithm. .PP .B adjtimex takes a pointer to a .I timex structure, updates kernel parameters from field values, and returns the same structure with current kernel values. This structure is declared as follows: .PP .RS .nf struct timex { int mode; /* mode selector */ long offset; /* time offset (usec) */ long frequency; /* frequency offset (scaled ppm) */ long maxerror; /* maximum error (usec) */ long esterror; /* estimated error (usec) */ int status; /* clock command/status */ long time_constant; /* pll time constant */ long precision; /* clock precision (usec) (read only) */ long tolerance; /* clock frequency tolerance (ppm) (read only) */ struct timeval time; /* (read only) */ long tick; /* usecs between clock ticks */ }; .fi .RE .PP The .I mode field determines which parameters, if any, to set. It may contain a .RI bitwise- or combination of zero or more of the following bits: .PP .RS .nf #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 */ .fi .RE .PP Ordinary users are restricted to a zero value for .IR mode . Only the superuser may set any parameters. .br .ne 12v .SH "RETURN VALUE" On success, .B adjtimex returns the value of .IR buf.status : .PP .RS .nf #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_BAD 4 /* clock not synchronized */ .fi .RE .PP On failure, .B adjtimex returns \-1 and sets .IR errno . .SH ERRORS .TP .B EFAULT .I buf does not point to writeable memory. .TP .B EPERM .I buf.mode is non-zero and the user is not super-user. .TP .B EINVAL An attempt is made to set .I buf.offset to a value outside the range \-131071 to +131071, or to set .I buf.status to a value other than those listed above, or to set .I buf.tick to a value outside the range .RB 900000/ HZ to .RB 1100000/ HZ , where .B HZ is the system timer interrupt frequency. .SH "SEE ALSO" .BR settimeofday (2).