.\" -*- coding: UTF-8 -*- '\" t .\" Copyright (c) 1995 Michael Chastain (mec@shell.portal.com), 15 April 1995. .\" and Copyright (C) 2014, 2016 Michael Kerrisk .\" .\" SPDX-License-Identifier: GPL-2.0-or-later .\" .\" Modified 1997-01-31 by Eric S. Raymond .\" Modified 1997-07-30 by Paul Slootman .\" Modified 2004-05-27 by Michael Kerrisk .\" .\"******************************************************************* .\" .\" This file was generated with po4a. Translate the source file. .\" .\"******************************************************************* .TH adjtimex 2 "20 июля 2023 г." "Linux man\-pages 6.05.01" .SH ИМЯ adjtimex, clock_adjtime, ntp_adjtime \- тонкая настройка часов в ядре .SH LIBRARY Standard C library (\fIlibc\fP, \fI\-lc\fP) .SH СИНТАКСИС .nf \fB#include \fP .PP \fBint adjtimex(struct timex *\fP\fIbuf\fP\fB);\fP .PP \fBint clock_adjtime(clockid_t \fP\fIclk_id,\fP\fB struct timex *\fP\fIbuf\fP\fB);\fP .PP \fBint ntp_adjtime(struct timex *\fP\fIbuf\fP\fB);\fP .fi .SH ОПИСАНИЕ В Linux для подстройки часов используется алгоритм Дэвида Л.\& Миллса (David L. Mills) (смотрите RFC\ 5905). Системный вызов \fBadjtimex\fP() читает и (необязательно) устанавливает параметры подстройки для этого алгоритма. Он берёт указатель на структуру \fItimex\fP, изменяет параметры ядра согласно значениям (некоторых) её полей и возвращает эту уже обновлённую структуру с текущими значениями параметров ядра. Данная структура объявлена так: .PP .in +4n .EX struct timex { int modes; /* выбор режима */ long offset; /* смещение по времени; в наносекундах, если установлен флаг состояния STA_NANO, иначе в микросекундах */ long freq; /* смещение частоты; единицы измерения */ описаны в ЗАМЕЧАНИЯХ */ long maxerror; /* максимальная ошибка (микросекунды) */ long esterror; /* ожидаемая ошибка (микросекунды) */ int status; /* команда/состояние для часов */ long constant; /* константа времени PLL (phase\-locked loop) */ long precision; /* точность часов (микросекунды, только чтение) */ long tolerance; /* допуск тактовой частоты (только чтение); единицы измерения описаны в ЗАМЕЧАНИЯХ */ struct timeval time; /* текущее время (только чтение, кроме ADJ_SETOFFSET); при возврате в time.tv_usec содержатся наносекунды, если установлен флаг STA_NANO, иначе микросекунды */ long tick; /* микросекунд между тиками часов */ long ppsfreq; /* частота PPS (импульсов в секунду) (только чтение); единицы измерения описаны в ЗАМЕЧАНИЯХ */ long jitter; /* искажение PPS (только чтение); в наносекундах, если установлен флаг состояния STA_NANO, иначе в микросекундах int shift; /* длительность интервала PPS (секунды, только чтение) */ long stabil; /* устойчивость PPS (только чтение); единицы измерения описаны в ЗАМЕЧАНИЯХ */ long jitcnt; /* счётчик превышений ограничения искажения PPS (только чтение) */ long calcnt; /* счётчик интервалов калибровки PPS (только чтение) */ long errcnt; /* счётчик ошибок калибровки PPS (только чтение) */ long stbcnt; /* счётчик событий превышения ограничения устойчивости PPS (только чтение) */ int tai; /* смещение TAI offset, установленное предыдущей операцией ADJ_TAI (секунды, только чтение, начиная с Linux 2.6.26) */ /* далее идут байты заполнения, для расширения структуры в будущем */ }; .EE .in .PP The \fImodes\fP field determines which parameters, if any, to set. (As described later in this page, the constants used for \fBntp_adjtime\fP() are equivalent but differently named.) It is a bit mask containing a bitwise OR combination of zero or more of the following bits: .TP \fBADJ_OFFSET\fP .\" commit 074b3b87941c99bc0ce35385b5817924b1ed0c23 Установить смещение по времени из \fIbuf.offset\fP. Начиная с Linux 2.6.26, переданное значение ограничивается диапазоном (\-0.5s, +0.5s). В старых ядрах, если значение выходит из диапазона, то возвращается ошибка \fBEINVAL\fP. .TP \fBADJ_FREQUENCY\fP .\" commit 074b3b87941c99bc0ce35385b5817924b1ed0c23 Установить смещение по частоте из \fIbuf.offset\fP. Начиная с Linux 2.6.26, переданное значение ограничивается диапазоном (\-32768000, +32768000) В старых ядрах, если значение выходит из диапазона, то возвращается ошибка \fBEINVAL\fP. .TP \fBADJ_MAXERROR\fP Установить максимальную ошибку времени из \fIbuf.maxerror\fP. .TP \fBADJ_ESTERROR\fP Установить ожидаемую ошибку времени из \fIbuf.esterror\fP. .TP \fBADJ_STATUS\fP Установить биты состояния часов из \fIbuf.status\fP. Описание бит представлено ниже. .TP \fBADJ_TIMECONST\fP Установить константу времени PLL из \fIbuf.constant\fP. Если не задан флаг состояния \fBSTA_NANO\fP (смотрите ниже), то ядро добавляет к этому значению 4. .TP \fBADJ_SETOFFSET\fP (начиная с Linux 2.6.39) .\" commit 094aa1881fdc1b8889b442eb3511b31f3ec2b762 .\" Author: Richard Cochran Добавить \fIbuf.time\fP к текущему времени. Если в \fIbuf.status\fP указан флаг \fBADJ_NANO\fP, то значение \fIbuf.time.tv_usec\fP считается заданным в наносекундах; в противном случае это микросекунды. .IP The value of \fIbuf.time\fP is the sum of its two fields, but the field \fIbuf.time.tv_usec\fP must always be nonnegative. The following example shows how to normalize a \fItimeval\fP with nanosecond resolution. .IP .in +4n .EX while (buf.time.tv_usec < 0) { buf.time.tv_sec \-= 1; buf.time.tv_usec += 1000000000; } .EE .in .TP \fBADJ_MICRO\fP (начиная с Linux 2.6.26) .\" commit eea83d896e318bda54be2d2770d2c5d6668d11db .\" Author: Roman Zippel Выбрать микросекундной разрешение. .TP \fBADJ_NANO\fP (начиная с Linux 2.6.26) .\" commit eea83d896e318bda54be2d2770d2c5d6668d11db .\" Author: Roman Zippel Выбрать наносекундной разрешение. Должно быть указано что\-то одно: \fBADJ_MICRO\fP или \fBADJ_NANO\fP. .TP \fBADJ_TAI\fP (начиная с Linux 2.6.26) .\" commit 153b5d054ac2d98ea0d86504884326b6777f683d Установить смещение TAI (атомное международное время) из \fIbuf.constant\fP. .IP \fBADJ_TAI\fP не должно использоваться вместе с \fBADJ_TIMECONST\fP, так как последний режим также использует поле \fIbuf.constant\fP. .IP Подробное описание TAI и различия между TAI и UTC смотрите в .UR http://www.bipm.org/en/bipm/tai/tai.html \fIBIPM\fP .UE .TP \fBADJ_TICK\fP Установить значение тика из \fIbuf.tick\fP. .PP .\" In general, the other bits are ignored, but ADJ_OFFSET_SINGLESHOT 0x8001 .\" ORed with ADJ_NANO (0x2000) gives 0xa0001 == ADJ_OFFSET_SS_READ!! Также в \fImodes\fP можно указывать любое из следующих значений (многобитовая маска), биты которых нельзя указать в \fImodes\fP: .TP \fBADJ_OFFSET_SINGLESHOT\fP .\" In user space, ADJ_OFFSET_SINGLESHOT is 0x8001 .\" In kernel space it is 0x0001, and must be ANDed with ADJ_ADJTIME (0x8000) Старый вариант \fBadjtime\fP(3): (постепенно) корректировать время значением, указанным в \fIbuf.offset\fP, которое задаётся в микросекундах. .TP \fBADJ_OFFSET_SS_READ\fP (работает, начиная с Linux 2.6.28) .\" In user space, ADJ_OFFSET_SS_READ is 0xa001 .\" In kernel space there is ADJ_OFFSET_READONLY (0x2000) anded with .\" ADJ_ADJTIME (0x8000) and ADJ_OFFSET_SINGLESHOT (0x0001) to give 0xa001) .\" commit 52bfb36050c8529d9031d2c2513b281a360922ec .\" commit 916c7a855174e3b53d182b97a26b2e27a29726a1 Получить (в \fIbuf.offset\fP) остаток необходимого откорректированного времени после выполнения операции \fBADJ_OFFSET_SINGLESHOT\fP. Это возможность была добавлена в Linux 2.6.24, но работала неправильно до Linux 2.6.28. .PP Обычные пользователи могут задавать в \fImodes\fP значение ноль или \fBADJ_OFFSET_SS_READ\fP. Только суперпользователь может задавать любые параметры. .PP Поле \fIbuf.status\fP представляет собой битовую маску, используется для установки/получения битов состояния, связанных с реализацией NTP. Одни биты в маске можно и читать, и изменять, другие — только читать. .TP \fBSTA_PLL\fP (чтение\-запись) Включить обновление фазовой подстройки частоты (PLL) через \fBADJ_OFFSET\fP. .TP \fBSTA_PPSFREQ\fP (чтение\-запись) Включить частотную дисциплину обслуживания PPS (импульсов в секунду). .TP \fBSTA_PPSTIME\fP (чтение\-запись) Включить временную дисциплину обслуживания PPS. .TP \fBSTA_FLL\fP (чтение\-запись) Выбрать режим частотной подстройки частоты (FLL). .TP \fBSTA_INS\fP (чтение\-запись) .\" John Stultz; .\" Usually this is written as extending the day by one second, .\" which is represented as: .\" 23:59:59 .\" 23:59:60 .\" 00:00:00 .\" .\" But since posix cannot represent 23:59:60, we repeat the last second: .\" 23:59:59 + TIME_INS .\" 23:59:59 + TIME_OOP .\" 00:00:00 + TIME_WAIT .\" Вставить високосную секунду за последней секундой дня UTC, то есть удлинить последнюю минуту дня на одну секунду. Вставка високосной секунды будет происходить каждый день пока установлен этот флаг. .TP \fBSTA_DEL\fP (чтение\-запись) .\" John Stultz: .\" Similarly the progression here is: .\" 23:59:57 + TIME_DEL .\" 23:59:58 + TIME_DEL .\" 00:00:00 + TIME_WAIT .\" FIXME Does there need to be a statement that it is nonsensical to set .\" to set both STA_INS and STA_DEL? Удалить високосную секунду из последней секунды дня UTC. Удаление високосной секунды будет происходить каждый день пока установлен этот флаг. .TP \fBSTA_UNSYNC\fP (чтение\-запись) Часы не синхронизированы. .TP \fBSTA_FREQHOLD\fP (чтение\-запись) .\" Following text from John Stultz: Зафиксировать частоту. Обычно корректировки, внесённые через результат \fBADJ_OFFSET\fP, приводят к ослаблению также проводимых настроек по частоте. Таким образом, единичный вызов исправляет текущее смещение, но поскольку смещения в том же направлении делаются неоднократно, маленькие изменения по частоте будут накапливаться, чтобы исправить длинный сдвиг. .IP .\" According to the Kernel Application Program Interface document, .\" STA_FREQHOLD is not used by the NTP version 4 daemon Данный флаг отключает маленькие исправления по частоте при корректировке значения \fBADJ_OFFSET\fP. .TP \fBSTA_PPSSIGNAL\fP (только чтение) Присутствует сигнал PPS (импульсов в секунду). .TP \fBSTA_PPSJITTER\fP (только чтение) Превышено искажение сигнала PPS. .TP \fBSTA_PPSWANDER\fP (только чтение) Превышено отклонение сигнала PPS. .TP \fBSTA_PPSERROR\fP (только чтение) Ошибка калибровки сигнала PPS. .TP \fBSTA_CLOCKERR\fP (только чтение) .\" Not set in current kernel (4.5), but checked in a few places Проблема с аппаратурой часов. .TP \fBSTA_NANO\fP (только чтение; начиная с Linux 2.6.26) .\" commit eea83d896e318bda54be2d2770d2c5d6668d11db .\" Author: Roman Zippel Единица данных (0 = микросекунды, 1 = наносекунды). Устанавливается с помощью \fBADJ_NANO\fP, очищается с помощью \fBADJ_MICRO\fP. .TP \fBSTA_MODE\fP (начиная с Linux 2.6.26) .\" commit eea83d896e318bda54be2d2770d2c5d6668d11db .\" Author: Roman Zippel Режим (0 = фазовая подстройка частоты, 1 = частотная подстройка частоты). .TP \fBSTA_CLK\fP (только чтение; начиная c Linux 2.6.26) .\" commit eea83d896e318bda54be2d2770d2c5d6668d11db .\" Author: Roman Zippel Источник часов (0 = A, 1 = B); не используется. .PP .\" Попытки установить биты \fIstatus\fP, помеченные только для чтения, просто игнорируются. .SS "clock_adjtime ()" The \fBclock_adjtime\fP() system call (added in Linux 2.6.39) behaves like \fBadjtimex\fP() but takes an additional \fIclk_id\fP argument to specify the particular clock on which to act. .SS "ntp_adjtime ()" Библиотечная функция \fBntp_adjtime\fP() (описана в NTP "Kernel Application Program API", KAPI) является более переносимым интерфейсом для выполнения той же задачи, что и \fBadjtimex\fP(). Она идентична \fBadjtimex\fP() кроме следующего: .IP \[bu] 3 Константы, используемые в \fImodes\fP, начинаются с «MOD_», а не с «ADJ_», и содержат одинаковые суффиксы (\fBMOD_OFFSET\fP, \fBMOD_FREQUENCY\fP, and so on), кроме: .IP \[bu] \fBMOD_CLKA\fP — синоним \fBADJ_OFFSET_SINGLESHOT\fP. .IP \[bu] \fBMOD_CLKB\fP — синоним \fBADJ_TICK\fP. .IP \[bu] Синонима для \fBADJ_OFFSET_SS_READ\fP в KAPI нет. .SH "ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ" При успешном выполнении \fBadjtimex\fP() и \fBntp_adjtime\fP() возвращают состояние часов, а именно одно из следующих значений: .TP 12 \fBTIME_OK\fP Часы синхронизированы, подстройки високосной секундой не ожидается. .TP \fBTIME_INS\fP Показывает, что в конце дня по UTC будет добавлена високосная секунда. .TP \fBTIME_DEL\fP Показывает, что в конце дня по UTC будет удалена високосная секунда. .TP \fBTIME_OOP\fP Выполняется вставка високосной секунды. .TP \fBTIME_WAIT\fP Выполнена вставка или удаление високосной секунды. Это значение возвращается при следующей операции \fBADJ_STATUS\fP по очистке флагов \fBSTA_INS\fP и \fBSTA_DEL\fP. .TP \fBTIME_ERROR\fP Системное время не синхронизировано с авторитетным сервером. Это значение возвращается при любом утвердительном значении следующего: .RS .IP \[bu] 3 Установлен \fBSTA_UNSYNC\fP или \fBSTA_CLOCKERR\fP. .IP \[bu] Флаг \fBSTA_PPSSIGNAL\fP сброшен и установлен \fBSTA_PPSFREQ\fP или \fBSTA_PPSTIME\fP. .IP \[bu] Установлены флаги \fBSTA_PPSTIME\fP и \fBSTA_PPSJITTER\fP. .IP \[bu] Установлен флаг \fBSTA_PPSFREQ\fP и \fBSTA_PPSWANDER\fP или \fBSTA_PPSJITTER\fP. .RE .IP Символическое имя \fBTIME_BAD\fP — синоним \fBTIME_ERROR\fP, предоставляется для обратной совместимости. .PP .\" commit 6b43ae8a619d17c4935c3320d2ef9e92bdeed05d changed to asynchronous .\" operation, so we can no longer rely on the return code. Заметим, что начиная с Linux 3.4 вызов выполняется асинхронно и возвращаемое значение, обычно, не отражает состояние, изменённое самим вызовом. .PP On failure, these calls return \-1 and set \fIerrno\fP to indicate the error. .SH ОШИБКИ .TP \fBEFAULT\fP \fIbuf\fP не является указателем на доступную для записи область памяти. .TP \fBEINVAL\fP (before Linux 2.6.26) .\" From a quick glance, it appears there was no clamping or range check .\" for buf.freq before Linux 2.0 Попытка установить \fIbuf.freq\fP в значение вне диапазона (\-33554432, +33554432). .TP \fBEINVAL\fP (before Linux 2.6.26) An attempt was made to set \fIbuf.offset\fP to a value outside the permitted range. Before Linux 2.0, the permitted range was (\-131072, +131072). From Linux 2.0 onwards, the permitted range was (\-512000, +512000). .TP \fBEINVAL\fP Попытка установить \fIbuf.status\fP в значение, отличное от перечисленных выше. .TP \fBEINVAL\fP The \fIclk_id\fP given to \fBclock_adjtime\fP() is invalid for one of two reasons. Either the System\-V style hard\-coded positive clock ID value is out of range, or the dynamic \fIclk_id\fP does not refer to a valid instance of a clock object. See \fBclock_gettime\fP(2) for a discussion of dynamic clocks. .TP \fBEINVAL\fP Предпринята попытка установить \fIbuf.tick\fP в значение вне диапазона от 900000/\fBHZ\fP до 1100000/\fBHZ\fP, где \fBHZ\fP — частота прерываний системного таймера. .TP \fBENODEV\fP The hot\-pluggable device (like USB for example) represented by a dynamic \fIclk_id\fP has disappeared after its character device was opened. See \fBclock_gettime\fP(2) for a discussion of dynamic clocks. .TP \fBEOPNOTSUPP\fP The given \fIclk_id\fP does not support adjustment. .TP \fBEPERM\fP Значение \fIbuf.modes\fP не равно 0 или \fBADJ_OFFSET_SS_READ\fP и вызывающий не имеет необходимых прав. В Linux для этого требуется мандат \fBCAP_SYS_TIME\fP. .SH АТРИБУТЫ Описание терминов данного раздела смотрите в \fBattributes\fP(7). .TS allbox; lbx lb lb l l l. Интерфейс Атрибут Значение T{ .na .nh \fB\%ntp_adjtime\fP() T} Безвредность в нитях MT\-Safe .TE .sp 1 .SH СТАНДАРТЫ .TP \fBadjtimex\fP() .TQ \fBclock_adjtime\fP() Linux. .PP Предпочтительным программным интерфейсом для службы NTP является \fBntp_adjtime\fP(). .SH ЗАМЕЧАНИЯ In struct \fItimex\fP, \fIfreq\fP, \fIppsfreq\fP, and \fIstabil\fP are ppm (parts per million) with a 16\-bit fractional part, which means that a value of 1 in one of those fields actually means 2\[ha]\-16 ppm, and 2\[ha]16=65536 is 1 ppm. This is the case for both input values (in the case of \fIfreq\fP) and output values. .PP Обработка високосной секунды, возникающая при установке \fBSTA_INS\fP и \fBSTA_DEL\fP, выполняется ядром в контексте таймера. Следовательно, для установки или удаления високосной секунды потребуется один тик для перехода. .SH "СМ. ТАКЖЕ" \fBclock_gettime\fP(2), \fBclock_settime\fP(2), \fBsettimeofday\fP(2), \fBadjtime\fP(3), \fBntp_gettime\fP(3), \fBcapabilities\fP(7), \fBtime\fP(7), \fBadjtimex\fP(8), \fBhwclock\fP(8) .PP .ad l .UR http://www.slac.stanford.edu/comp/unix/\:package/\:rtems/\:src/\:ssrlApps/\:ntpNanoclock/\:api.htm NTP "Kernel Application Program Interface" .UE .PP .SH ПЕРЕВОД Русский перевод этой страницы руководства был сделан Dmitry Bolkhovskikh и Yuri Kozlov . .PP Этот перевод является бесплатной документацией; прочитайте .UR https://www.gnu.org/licenses/gpl-3.0.html Стандартную общественную лицензию GNU версии 3 .UE или более позднюю, чтобы узнать об условиях авторского права. Мы не несем НИКАКОЙ ОТВЕТСТВЕННОСТИ. .PP Если вы обнаружите ошибки в переводе этой страницы руководства, пожалуйста, отправьте электронное письмо на .MT man-pages-ru-talks@lists.sourceforge.net .ME .