time系统时钟

系统时钟

时钟是用来度量时间的装置,它可以是硬件装置,也可以用软件来实现。任何UNIX系统都有一个记录实际时间的系统时钟,这个时钟记录着自1970年1月1日格林威治时间00:00:00以来已经逝去的秒和微秒数。所有UNIX系统均采用这个日期和时间作为时间的开始点。有趣的是,由于闰秒,历史上这个时间并不存在。这个时间习惯上也称为UNIX纪元(epoch),即传说中的UNIX诞辰。尽管UNIX实际开始于20世纪60年代,但它的第一个版本诞生于20世纪70年代初期。

系统时钟给出的是最基本的时间,它与真实的时钟保持一致,所有其他形式的日历时间都是通过它转换而来的。查看系统时钟有两个标准函数:time()和gettimeofday()。

time()函数

#include <time.h>
time_t time(time_t *tloc);
double difftime(time_t time1, time_t timeo);

函数time()返回自UNIX纪元开始以来经过了的总秒数(称为原始时间)。如果tloc是非空指针,time()同时也将返回值存储在*tloc中。

在多数系统中,time_t类型等价于long int。在32位的系统中,long int为32位,这个类型的对象可以表示约68年的时间,因此在2038年之后32位的time_t类型将会发生溢出。不过在64位的系统中,long int为64位,它可以表示数千亿年的时间。

time()函数的用途之一是度量程序的执行时间,为此常常需要计算两个time_t类型值之差。一般会认为简单地将两次调用time()的返回值相减即可,但是ISO/ANSI C标准并没有规定time_t类型一定是整型,在有的系统上time_t也可能是浮点类型或另外的编码。因此为了兼容性,UNIX系统提供了函数difftime()。

difftime()计算参数time1和time0之差,并将结果作为双精度浮点数返回。

例8-1 程序8-1说明了time()和difftime()函数的功能。

int main() {
	int i;
	time_t current_time, begin_time;
	begin_time = time((time_t *) NULL);
	for (i = 0; i <= 5; i++) {
		printf("current time is %ld\n", time((time_t *) 0));
		sleep(2);
	}
	printf("elapsed wall time is %lf(s) \n");
	exit(0);
}

这个程序将打印出5个原始时间值和程序的运行时间。

$ ./a.out 
current time is 1658486980
current time is 1658486982
current time is 1658486984
current time is 1658486986
current time is 1658486988
elapsed wall time is 10.000000(s)

从运行结果可看出,原始时间值是自UNIX纪元以来的秒数,且每一个比前一个相差两秒,因为我们每隔两秒才调用time()一次。

gettimeofday()函数

用tim

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值