Provided by: manpages-ru-dev_4.21.0-2_all bug

ИМЯ

       adjtime - корректировка времени для синхронизации с системными часами

LIBRARY

       Standard C library (libc, -lc)

СИНТАКСИС

       #include <sys/time.h>

       int adjtime(const struct timeval *delta, struct timeval *olddelta);

   Требования макроса тестирования свойств для glibc (см. feature_test_macros(7)):

       adjtime():
           Начиная с glibc 2.19:
               _DEFAULT_SOURCE
           В версии glibc 2.19 и более ранних:
               _BSD_SOURCE

ОПИСАНИЕ

       Функция  adjtime() постепенно подстраивает системные часы (значение которых можно получить
       функцией gettimeofday(2)). Количество времени, на которое будут подстроены часы, указано в
       структуре, на которую указывает delta. Данная структура имеет следующий формат:

           struct timeval {
               time_t      tv_sec;     /* секунды */
               suseconds_t tv_usec;    /* микросекунды */
           };

       Если время подстройки в delta положительно, то ход системных часов ускоряется на небольшой
       процент (то есть каждая секунда длится чуть дольше) до тех пор, пока подстройка  не  будет
       завершена.  Если  время  подстройки  в  delta отрицательно, то часы будут замедлены схожим
       способом.

       Если подстройка системных часов по adjtime() уже  производится  во  время  второго  вызова
       adjtime(),   и   delta   второго   вызова  не  равна  NULL,  то  более  ранняя  подстройка
       останавливается, однако уже завершённая часть подстройки не отменяется.

       Если значение olddelta не равно NULL, то буфер, на который оно указывает, будет  содержать
       количество оставшегося после предыдущей незавершенной подстройки времени.

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ

       При  успешном  выполнении  adjtime()  возвращает  0.  При  ошибке  возвращается  -1, errno
       устанавливается в соответствующее значение.

ОШИБКИ

       EINVAL Подстройка в delta находится вне разрешённого диапазона.

       EPERM  Вызывающий не обладает нужными привилегиями для подстройки  времени.  В  Linux  для
              этого требуется мандат CAP_SYS_TIME.

АТРИБУТЫ

       Описание терминов данного раздела смотрите в attributes(7).

       ┌───────────────────────────────────────────────────────┬──────────────────────┬──────────┐
       │ИнтерфейсАтрибутЗначение │
       ├───────────────────────────────────────────────────────┼──────────────────────┼──────────┤
       │adjtime()                                              │ Безвредность в нитях │ MT-Safe  │
       └───────────────────────────────────────────────────────┴──────────────────────┴──────────┘

СТАНДАРТЫ

       4.3BSD, System V.

ЗАМЕЧАНИЯ

       Подстройка  adjtime() заставляет часы постоянно ускорять свой ход. Использование adjtime()
       для подстройки времени предотвращает  проблемы,  которые   могут  возникнуть  у  некоторых
       программ (например, make(1)), если происходят скачки времени вперед или назад.

       Функция  adjtime()  предназначена  для  использования  подстроек  системных  часов  малыми
       значениями. В большинстве систем есть ограничение для времени  подстройки,  которое  можно
       указывать  в  delta.  В  реализации  glibc  значение  delta  должно быть меньше либо равно
       (INT_MAX / 1000000 - 2) и больше либо равно (INT_MIN / 1000000 + 2) (для i386 эти значения
       равны -2145 и 2145 секунд, соответственно).

ДЕФЕКТЫ

       Была  застарелая ошибка, при который если delta была определена как NULL, то информация по
       предыдущей подстройке в  olddelta  не  возвращалась  (в  данном  случае  adjtime()  должна
       возвращать  последнюю  подстройку  часов  без  изменений).  Эта  ошибка  была исправлена в
       системах с glibc 2.8 и выше и ядром Linux 2.6.26 и выше.

СМ. ТАКЖЕ

       adjtimex(2), gettimeofday(2), time(7)

ПЕРЕВОД

       Русский   перевод   этой   страницы   руководства   был   сделан    Dmitry    Bolkhovskikh
       <d20052005@yandex.ru> и Yuri Kozlov <yuray@komyakino.ru>

       Этот  перевод  является  бесплатной  документацией;  прочитайте  Стандартную  общественную
       лицензию GNU версии 3 ⟨https://www.gnu.org/licenses/gpl-3.0.html⟩ или более позднюю, чтобы
       узнать об условиях авторского права. Мы не несем НИКАКОЙ ОТВЕТСТВЕННОСТИ.

       Если  вы  обнаружите  ошибки  в  переводе этой страницы руководства, пожалуйста, отправьте
       электронное письмо на ⟨man-pages-ru-talks@lists.sourceforge.net⟩.