这些日子在学习Unix上的编程方法,对time_t和timeval有些不理解,于是在网上搜索一些文章,碰巧见到下面这个比较有意思的东东。
原文如下:
Linux上glibc的man手册关于timeval结构解释的错误
作者:nathanxu 来源:不详 (2006-07-11 17:43:44)
问题如下:
在debian linux的man页中对gettimeofday函数的说明中,有这样一个说明:
DESCRIPTION
The functions gettimeofday and settimeofday can get and set the time as
well as a timezone. The tv argument is a timeval struct, as specified
in :
struct timeval {
time_t tv_sec; /* seconds */
suseconds_t tv_usec; /* microseconds */
};
其中对tv_usec的说明为时间的毫秒部分。 而在实际中,该函数以及Linux内核返回的timeval
类型的时间值,tv_usec代表的是微秒精度(10的-6次方秒)。
测试代码如下:
#include
#include
#include
int gettimeofday(struct timeval *tv, struct timezone *tz);
int main(int argc,char * argv[]){
struct timeval tv;
while(1){
gettimeofday(&tv,NULL);
printf("time %u:%u/n",tv.tv_sec,tv.tv_usec);
sleep(2);
}
return 0;
}
返回结果为:
evil@dcenter:~/tmp$ ./a.out
time 1142077839:903605
time 1142077841:910129
time 1142077843:920155
time 1142077845:930180
time 1142077847:940205
time 1142077849:950231
time 1142077851:960256
time 1142077853:970280
time 1142077855:980307
time 1142077857:990331
(http://www.fanqiang.com)
多数人看到这篇文章的第一反映恐怕是:“开源也不是完美的么”,或者有一些“稍懂”一些的人说:“开源软件的文档确实写的不好”。
到这里为止,你的想法是什么呢?
若干年前,大约在2000年左右,有一部反映IT和黑客题材的港台电视剧,名字叫什么我已经积不清楚了,里面有一句很经典的话:“你所看到的世界,不是真实的世界”^_^
那么,真实的情况是什么样子的呢?
^_^
^_^
^_^
^_^
真实的情况是:这位老兄对Microsecond的理解有误,Microsecond就是微秒的意思。毫秒是Milisecond。查查字典就不会出现这样的问题了>_<
如何避免愚见呢,对知识勤快一些恐怕是一个办法吧。
^_^