您的位置:首页 > 运维架构 > Linux

Linux下time函数

2016-04-11 18:28 441 查看
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.  */
};

#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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: