gettimeofday用于获取当前时间。
相应头文件:#include <sys/time.h>; #include <unistd.h>
函数说:int gettimeofday ( struct timeval * tv , structtimezone * tz )
gettimeofday()会将当前时间timeval返回,当地时区信息则放在timezone中。
返回值成功则返回0,失败返回-1,错误代码存于errno.
timeval结构定义为:
struct timeval{
long tv_sec;
long tv_usec;
};
timezone 结构定义为:
struct timezone{
int tz_minuteswest;
int tz_dsttime;
};
上述两个结构都定义在/usr/include/sys/time.h。
Example1:
#include <sys/time.h>
#include <stdlib.h>
#include <stdio.h>
int main()
{
struct timeval tv;
struct timezone tz;
gettimeofday (&tv , &tz);
printf("tv_sec: %d\n", tv.tv_sec) ;
printf("tv_usec: %d\n",tv.tv_usec);
printf("tz_minuteswest: %d\n", tz.tz_minuteswest);
printf("tz_dsttime: %d\n",tz.tz_dsttime);
return 0;
}
/*
outout is:
tv_sec: 1363756576
tv_usec: 542189
tz_minuteswest: 0
tz_dsttime: 0
*/
Example 2:
#include <sys/time.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
int main()
{
timeval startTime;
memset(&startTime, 0, sizeof(struct timeval));
gettimeofday(&startTime, NULL);
long res = 0;
for(long i = 0; i < 10000; ++i )
{
for(long j = 0; j < 100000; ++j )
{
res += i - j;
}
}
timeval endTime;
memset(&endTime, 0, sizeof(struct timeval));
gettimeofday(&endTime, NULL);
long uSecPart = endTime.tv_usec - startTime.tv_usec;
double temp = ((endTime.tv_sec - startTime.tv_sec)*1000000 + uSecPart)/ 1000000.0f;
printf( "duration is %f\n", temp);
return 0;
}
下面是几个秒单位的转换:
msec: millisecond 毫秒,千分之一秒(1/kilo);
usec: microsecond 微秒,兆分之一秒(1/million),原为μs;
nsec: nanosecond 纳秒,十亿分之一秒(1/billion)。