Точная корректировка (регулировка) системного времени
#include <sys/neutrino.h>int ClockAdjust( clockid_t id,const struct _clockadjust *new,struct _clockadjust *old );int ClockAdjust_r( clockid_t id,const struct _clockadjust *new,struct _clockadjust *old );
NULL
или указатель на структуру struct _clockadjust, определяющую параметры регулировки часов. Предыдущие параметры регулировки будут заменены.NULL
, то он указывает на структуру struct _clockadjust, в которой будут сохранены текущие параметры регулировки, которые действовали до изменения их на значения из new.libc
Данные системные вызовы обеспечивают плавную корректировку времени часов с типом id. Эти функции можно использовать для ускорения или замедления системных часов с целью их синхронизации с другим источником времени без значительных разрывов течения времени.
Функции ClockAdjust() и ClockAdjust_r() рабатают аналогично, но по разному указывают на возможные ошибки.
Общая корректировка времени в наносекундах:
(new->tick_count * new->tick_nsec_inc)
Если текущее время часов опережают желаемое время, необходимо указать отрицательное значение tick_nsec_inc для замедления хода часов. Такой подход предпочтительнее установки времени назад, например, с помощью функцией ClockTime(), поскольку в работе некоторых программ могут возникнуть сбои, если перевести время назад.
Указание малых значений в tick_nsec_inc и больших значений в tick_count приводит к медленной корректировке времени, в то время как противоположный подход позволяет провести корректировку быстрее.
Рекомендуется не устанавливать элемент tick_nsec_inc в значение, превышающее такт часов (ticksize), который устанавливается системным вызовом ClockPeriod(). Такое действие изменит тактовую частоту более чем на 100%, что может привести к тому, что часы пойдут назад.
Для отмены текущей корректировки необходимо установить элементы tick_count и tick_nsec_inc в значение 0
.
Для регулировки часов требуются права суперпользователя.
Данные вызовы являются неблокируемыми.
-1
, код ошибки записывается в errno. Любое другое возвращенное значение считается успешным завершением.EOK
возвращается при успешном завершении. Функция НЕ устанавливает errno. При возникновении ошибки функция возвращает один из представленных ниже кодов.
ЗОСРВ «Нейтрино»
struct _clockadjust, ClockPeriod(), ClockTime()
Предыдущий раздел: Описание API системной библиотеки