Linux time関数
4333 ワード
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):
ftime関数プロトタイプ(timeb.h):
int ftime(struct timeb *tp);
パラメータ:
timeb構造体変数へのポインタ.
戻り値:
現在のシステム時間はtimeb構造体に秒とミリ秒を含む.現在の時間をミリ秒まで正確に取得する役割を果たします.
timeb構造体(sys/timeb.h):
times関数のプロトタイプ:
clock_t times(struct tms *buf);
パラメータ:
tms構造体変数へのポインタ.
戻り値:
clock_tはlongタイプに等しい.プロセス実行時のCPU時間を取得します.
tms構造体(sys/times.h):
実行結果:
[root@server ~]# ./test 10 current time is 1421644980 seconds 2015-01-19 00:23:00 2015-01-19 00:23:00:00:07:781 lBeginTime=708268851 lEndTime=708270107サイクル使用CPU時間:1256変換秒:12.560000
Linuxラーニングチュートリアルネットワーク
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
", curr);
//localtime time_t
tTM = localtime(&curr);
printf("%4d-%02d-%02d %02d:%02d:%02d
", 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
", 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
", lBeginTime);
while (1)
{
i = i + 1;
if (i == 0)
break;
}
lEndTime = times(&tTMS);
printf("lEndTime = %ld
", lEndTime);
printf(" CPU : %ld
", lEndTime - lBeginTime);
tck = sysconf(_SC_CLK_TCK);// (1 )
printf(" : %f
", ((lEndTime - lBeginTime) / (double)tck));
return 0;
}
実行結果:
[root@server ~]# ./test 10 current time is 1421644980 seconds 2015-01-19 00:23:00 2015-01-19 00:23:00:00:07:781 lBeginTime=708268851 lEndTime=708270107サイクル使用CPU時間:1256変換秒:12.560000
Linuxラーニングチュートリアルネットワーク