ClockAdjust(), ClockAdjust_r()

Точная корректировка (регулировка) системного времени

Прототип:

#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 );

Аргументы:

id
Идентификатор (тип) часов, которые необходимо отрегулировать. Этот параметр должен быть равен CLOCK_REALTIME, поскольку это тип часов обеспечивает ведение системного времени.
new
NULL или указатель на структуру struct _clockadjust, определяющую параметры регулировки часов. Предыдущие параметры регулировки будут заменены.
old
Если значение этого параметра не равно 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.

Для регулировки часов требуются права суперпользователя.

Состояния блокировки:

Данные вызовы являются неблокируемыми.

Возвращаемое значение:

ClockAdjust()
Если возникла ошибка функция возвращает -1, код ошибки записывается в errno. Любое другое возвращенное значение считается успешным завершением.
ClockAdjust_r()
EOK возвращается при успешном завершении. Функция НЕ устанавливает errno. При возникновении ошибки функция возвращает один из представленных ниже кодов.

Коды ошибок:

EFAULT
Произошла ошибка при доступе ядра к буферам памяти.
EINVAL
Некорректный тип часов.
EPERM
Процесс не имеет прав суперпользователя, необходимых для проведения регулировки часов.

Классификация:

ЗОСРВ «Нейтрино»

Безопасность использования
Точка остановки потока
Нет
Обработчик прерываний
Нет
Обработчик сигналов
Да
В потоке
Да

Тематические ссылки:

struct _clockadjust, ClockPeriod(), ClockTime()




Предыдущий раздел: Описание API системной библиотеки