Функция для возврата количества секунд с 01.01.1900 - PullRequest
0 голосов
/ 10 января 2012

Есть ли в ядре функция для преобразования timespec, возвращенного, например, из do_gettimeofday, в число секунд с 01.01.1900 в «64-битное число без знака с фиксированной точкой», как описано в RFC 1305 ?

1 Ответ

0 голосов
/ 10 января 2012

Есть несколько проблем с тем, что вы хотите.Однако, чтобы увидеть, что делает ваше ядро, попробуйте выполнить поиск, подобный следующему:

http://www.google.com/codesearch#search/&q=adjtimex%20lang:%5Ec$&type=cs

Это должно вернуть код для непосредственного чтения и установки внутреннего времени хранения данных ядра для вашего ящика.Вам придется прокручивать множество списков.

npt использует то, что составляет struct timeval, два 32-битных целых числа без знака, один отслеживает секунды, другие отслеживают доли секунды, начиная с 01 января 1900 года.Отслеживаемые доли различаются в ntp и в структуре timeval.

Одна из проблем заключается в следующем: используете ли вы 32- или 64-битные API времени и даты?Обратите внимание, что 1900 НЕ ПРЕДОСТАВЛЯЕТСЯ 32-битному API (это 32-битный вывод Linux с использованием TZ = UTC)

#include <time.h>
#include <stdio.h>
void ptime(char *dest, time_t *lt)
{
   strftime(dest, 80, "%c", localtime(lt));
   printf("%08x(%010u): %s\n", *lt, *lt, dest);
}

int main(void)
{
   char tmp[80]={0x0};
   time_t lt[8]={1, 0xffffffff, 0x7fffffff, 0x80000000, 0}, *p=lt;
   while(*p) ptime(tmp, p++);
   return 1;
}
output:
00000001(0000000001): Thu Jan  1 00:00:01 1970
ffffffff(4294967295): Wed Dec 31 23:59:59 1969
7fffffff(2147483647): Tue Jan 19 03:14:07 2038
80000000(2147483648): Fri Dec 13 20:45:52 1901

Обратите внимание на время начала и окончания.Они не имеют никакого отношения к 1900 году. 64-битные API также по-другому пропускают 1900 год.

Протокол ntp соответствует ритму своего собственного барабана.Он начинается с 0 секунд и «истекает» время (как проблема Y2K) где-то в 2037 году.

Я бы посмотрел код C xntp или ntp и использовал бы их представления, но не ожидаюбыть в состоянии сделать что-нибудь с ним, используя ваш API времени и даты Linux.Вам нужно будет запросить у ntp-сервера, что вы хотите получить надежно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...