linux timeb 结构体,Linux time函数

Linux下time函数都在time.h头文件中。

1、头文件

和时间有关的头文件有以下几个:

time.h

sys/time.h

sys/times.h

sys/timeb.h

sys/timex.h

time.h是C标准库的头文件,其余sys开头的都是Linux系统自己的头文件。

/usr/include/time.h定义了常用的time函数。

到/usr/include/sys目录下查看这几个文件:

sys/time.h定义了timezone结构体和Linux系统的时间函数。

sys/times.h定义了进程使用CPU时间的结构体tms。

sys/timeb.h定义了ftime函数的返回值的结构体timeb。

sys/timex.h定义了关于时钟调整算法的结构体timex。

2、常用函数和结构体

time函数原型(time.h中):

time_t time(time_t *calptr);

参数:

time_t类型变量的指针。

返回值:

time_t类型相当于一个long,time用于取Epoch记年以来到现在经过的秒数(系统当前时间),Epoch记年从1970年1月1日开始。把取到的时间存在指针指向的变量中。

localtime函数原型(time.h中):

struct tm *localtime(const time_t *calptr);

参数:

time_t类型变量的指针。

返回值:

指向tm结构体的指针类型。

作用是将time_t的值转换为tm结构体。然后可以打印输出。

tm结构体(time.h中):

/* Used by other time functions. */

struct tm

{

int tm_sec;/* Seconds.[0-60] (1 leap second) */

int tm_min;/* Minutes.[0-59] */

int tm_hour;/* Hours.[0-23] */

int tm_mday;/* Day.[1-31] */

int tm_mon;/* Month.[0-11] */

int tm_year;/* Year- 1900. */

int tm_wday;/* Day of week.[0-6] */

int tm_yday;/* Days in year.[0-365]*/

int tm_isdst;/* DST.[-1/0/1]*/

#ifdef__USE_BSD

long int tm_gmtoff;/* Seconds east of UTC. */

__const char *tm_zone;/* Timezone abbreviation. */

#else

long int __tm_gmtoff;/* Seconds east of UTC. */

__const char *__tm_zone;/* Timezone abbreviation. */

#endif

};

ftime函数原型(timeb.h):

int ftime(struct timeb *tp);

参数:

指向timeb结构体变量的指针。

返回值:

将当前系统时间存入timeb结构体中,包括了秒和毫秒。作用就是能获取当前时间精确到毫秒。

timeb结构体(sys/timeb.h):

/* Structure returned by the `ftime' function. */

struct timeb

{

time_t time;/* Seconds since epoch, as from `time'. */

unsigned short int millitm;/* Additional milliseconds. */

short int timezone;/* Minutes west of GMT. */

short int dstflag;/* Nonzero if Daylight Savings Time used. */

};

times函数原型:

clock_t times(struct tms *buf);

参数:

指向tms结构体变量的指针。

返回值:

clock_t等同于long类型。用于获得进程运行时的CPU时间。

tms结构体(sys/times.h中):

/* Structure describing CPU time used by a process and its children. */

struct tms

{

clock_t tms_utime;/* User CPU time. */

clock_t tms_stime;/* System CPU time. */

clock_t tms_cutime;/* User CPU time of dead children. */

clock_t tms_cstime;/* System CPU time of dead children. */

};

3、例子程序:test10.c

#include

#include

#include

#include

#include

#include

int main(void)

{

int i = 0;

int sum = 0;

long tck = 0;

long lBeginTime = 0;

long lEndTime = 0;

time_t curr;

struct tm * tTM;

struct tms tTMS;

struct timeb tTimeB;

tzset();

//time函数获得秒数

time(&curr);

printf("current time is %ld seconds\n", curr);

//localtime函数转换time_t

tTM = localtime(&curr);

printf("%4d-%02d-%02d %02d:%02d:%02d\n", tTM->tm_year + 1900, tTM->tm_mon + 1, tTM->tm_mday,

tTM->tm_hour, tTM->tm_min, tTM->tm_sec);

//ftime函数获得时间包括毫秒

ftime(&tTimeB);

tTM = localtime(&tTimeB.time);

printf("%4d-%02d-%02d %02d:%02d:%02d :%3d\n", tTM->tm_year + 1900, tTM->tm_mon + 1, tTM->tm_mday,

tTM->tm_hour, tTM->tm_min, tTM->tm_sec, tTimeB.millitm);

//用times函数计算以下循环运行花费的时间

lBeginTime = times(&tTMS);

printf("lBeginTime = %ld\n", lBeginTime);

while (1)

{

i = i + 1;

if (i == 0)

break;

}

lEndTime = times(&tTMS);

printf("lEndTime = %ld\n", lEndTime);

printf("循环使用的CPU时间为: %ld\n", lEndTime - lBeginTime);

tck = sysconf(_SC_CLK_TCK);//获取系统时钟(1秒里有多少个)

printf("转换为秒: %f\n", ((lEndTime - lBeginTime) / (double)tck));

return 0;

}

执行结果:

[root@server ~]# ./test10

current time is 1421644980 seconds

2015-01-19 00:23:00

2015-01-19 00:23:00 :781

lBeginTime = 708268851

lEndTime = 708270107

循环使用的CPU时间为: 1256

转换为秒: 12.560000

参考资料:

http://www.cnblogs.com/yaozhongxiao/archive/2013/04/14/3020353.html

http://blog.csdn.net/jinan1861/article/details/5927677

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值