ClockTime(), ClockTime_r()

Считать или установить часы системного времени

Прототип:

#include <sys/neutrino.h>
int ClockTime( clockid_t id,
const uint64_t *new,
uint64_t *old );
int ClockTime_r( clockid_t id,
const uint64_t *new,
uint64_t *old );

Аргументы:

id
Идентификатор часов. Может иметь значение CLOCK_REALTIME или CLOCK_MONOTONIC, которое является идентификатором часов системного времени, или идентификатором часов, возвращаемым ClockId().
new
NULL, или указатель на абсолютное время (в наносекундах) для установки часов. Параметр игнорируется, если id имеет значение CLOCK_MONOTONIC.
old
NULL, или указатель на место, где будет храниться текущее время до того, как оно будет изменено новым, отличным от NULL значением new.

Библиотека:

libc

Описание:

Этот системный вызов считывает или устанавливает системные часы с идентификатором Часы с идентификатором CLOCK_REALTIME или CLOCK_MONOTONIC поддерживают системное время.

Функции ClockTime() и ClockTime_r() идентичны, но по разному указывают на ошибки.


Note: Вместо данного системного вызова рекомендуется использовать функции clock_gettime() или clock_settime().

Если параметр new не равен NULL, тогда он содержит абсолютное время в наносекундах для установки системных часов. Установка изменит значение программных часов и не влияет на аппаратные часы (RTC), которые поддерживают время после отключения питания ЭВМ.


Note: Для установки системного времени требуется наличие привилегий суперпользователя. Вы не можете установить время, если id равен CLOCK_MONOTONIC.

Если ClockTime() используется для установки времени дня, то ядро проверяет, установлено ли в 0 поле системной страницы SYSPAGE_ENTRY( qtime )->boot_time. Если это так, то ядро запишет в него соответствующее значение. Стартовая программа ОС startup имеет опцию -T, которая предотвращает установку этого поля и тогда ядро установит это поле при первом вызове ClockTime() для изменения времени дня. Это полезная возможность, если аппаратные часы RTC не находятся в UTC.

После установки системное время увеличивается на некоторое количество наносекунд в зависимости от разрешения системного таймера. Запросить или изменить это разрешение можно с помощью функции - системного вызова ClockPeriod().

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

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

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

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

Коды ошибок:

EFAULT
Возникла ошибка, когда ядро попыталось получить доступ к буферам.
EINVAL
Некорректный идентификатор часов - не равен CLOCK_REALTIME или CLOCK_MONOTONIC.
EPERM
У процесса нет прав суперпользователя для изменения времени.
ESRCH
Отсутствует ассоциированный с запросом процесс.

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

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

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

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

clock_gettime(), clock_settime(), ClockAdjust(), ClockPeriod(), SYSPAGE_ENTRY()




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