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):
/* 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ラーニングチュートリアルネットワーク