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. */
};
#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;
}
執行結果:
[[email protected] ~]# ./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
---------------------
作者:謝謝考拉
來源:CSDN
原文:https://blog.csdn.net/hou512504317/article/details/51124118
版權宣告:本文為博主原創文章,轉載請附上博文連結!