adjtimex
1. adjtimex.2.man
Manpage of ADJTIMEX
ADJTIMEX
Section: Руководство программиста Linux (2)Updated: 2004-05-27
Index Return to Main Contents
ИМЯ
adjtimex - тонкая настройка часов в ядреОБЗОР
#include <sys/timex.h>int adjtimex(struct timex *buf);
ОПИСАНИЕ
В Linux для подстройки часов используется алгоритм Дэвида Л. Миллса (David L. Mills) (см. RFC 1305). Системный вызов adjtimex() читает и (необязательно) устанавливает параметры подстройки для этого алгоритма. В качестве аргумента используется указатель на структуру timex, по значениям в полях которой осуществляется обновление параметров ядра и в этой же структуре происходит возврат текущих значений параметров ядра. Данная структура объявлена так:
struct timex {
int modes; /* выбор режима */
long offset; /* смещение по времени (usec) */
long freq; /* частота смещения (scaled ppm) */
long maxerror; /* максимальная ошибка (usec) */
long esterror; /* ожидаемая ошибка (usec) */
int status; /* команда/состояние для часов */
long constant; /* временная константа pll */
long precision; /* точность часов (usec) (только чтение) */
long tolerance; /* clock frequency tolerance (ppm)
(read-only) */
struct timeval time; /* текущее время (только чтение) */
long tick; /* usecs between clock ticks */
};
Поле modes определяет какие параметры, если это необходимо, устанавливаются. Значение поля может содержать комбинации (or) битовых масок, значения которых следующие:
#define ADJ_OFFSET 0x0001 /* смещение времени */ #define ADJ_FREQUENCY 0x0002 /* частота смещения */ #define ADJ_MAXERROR 0x0004 /* максимальная ошибка времени */ #define ADJ_ESTERROR 0x0008 /* ожидаемая ошибка времени */ #define ADJ_STATUS 0x0010 /* состояние часов */ #define ADJ_TIMECONST 0x0020 /* временная константа pll */ #define ADJ_TICK 0x4000 /* значение тика */ #define ADJ_OFFSET_SINGLESHOT 0x8001 /* old-fashioned adjtime() */
Обычные пользователи могут писать в mode только ноль. Только
суперпользователь может задавать любые параметры.
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ
В случае успеха, adjtimex() возвращает состояние часов:
#define TIME_OK 0 /* часы синхронизированы */ #define TIME_INS 1 /* вставлена високосная секунда */ #define TIME_DEL 2 /* удалена високосная секунда */ #define TIME_OOP 3 /* идёт високосная секунда */ #define TIME_WAIT 4 /* закончилась високосная секунда */ #define TIME_BAD 5 /* часы не синхронизированы */
В случае неудачи, adjtimex() возвращает -1 и устанавливает errno.
ОШИБКИ
- EFAULT
- buf не является указателем на доступную для записи область памяти.
- EINVAL
- Попытка установить buf.offset в значение, выходящее за диапазон от -131071 до +131071, или установить buf.status в значение отличное от перечисленных выше, или установить buf.tick в значение за пределами диапазона от 900000/HZ до 1100000/HZ, где HZ --- частота прерываний системного таймера.
- EPERM
- buf.mode не ноль, а вызвавший процесс не имеет достаточных прав В Linux для этого требуется мандат CAP_SYS_TIME.
СООТВЕТСТВИЕ СТАНДАРТАМ
adjtimex() --- это специфичный для Linux системный вызов и он не должен использоваться в программах, которые должны быть переносимыми. Существует похожий, более переносимый, более гибкий метод настройки системных часов adjtime(3).СМОТРИТЕ ТАКЖЕ
settimeofday(2), adjtime(3), capabilities(7), time(7)
Index
This document was created by man2html using the manual pages.
Time: 17:41:29 GMT, May 11, 2012




