内核中是否有一个函数用于将从timespec
返回的do_gettimeofday
转换为自“1/4/1900”以来的“64位无符号定点数”中的秒数如RFC 1305?
答案 0 :(得分:0)
您想要的有几个问题。但是要看看你的内核在做什么 尝试这样的搜索:
http://www.google.com/codesearch#search/&q=adjtimex%20lang:%5Ec$&type=cs
这应该返回用于直接读取和设置内核的内部时间保存数据的代码。你必须滚动很多列表。
npt使用的是结构时间值,两个32位无符号整数,一个跟踪秒,另一个跟踪1900年1月1日以来的分数。跟踪的分数在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秒开始,并将在2037年的某个地方“耗尽”时间(如Y2K问题)。
我会查找C代码xntp或ntp并使用它们的表示,但不要期望能够使用Linux时间和它做任何事情。日期api。您必须查询ntp服务器才能可靠地获得所需内容。