Linux下時間/時區的設置以及gettimeofday()函數的使用方法

Linux下時間/時區的設置

 
Linux機器上的時間比較複雜,有各式各樣的時鐘和選項等等。機器裏有兩個時鐘,硬件時鐘從根本上講是CMOS時鐘,而系統時鐘是由內核維護的。
1. 修改硬件時鐘
(1)更新機器的硬件時間。命令爲:
hwclock --adjust
硬件時鐘通常被設置成全球標準時間(UTC),而將時區信息保存在/usr/share/lib/timezone (或者在某些系統中可能是/usr/local/timezone)目錄下某個適當的文件中,然後用一個符號鏈接文件/etc/localtime指向它。
(2)查看硬件時鐘。命令爲:hwclock --show
(3)重置硬件時鐘用:hwclock --set --date=mm/dd/yy hh:MM:ss"
2. 修改時區信息。命令爲:tzset
如果系統中沒有這條命令,那可以用類似下面的操作:
ln -s /etc/localtime /usr/share/zoneinfo/US/Pacific
3. 選擇時區信息。命令爲:tzselect
根據系統提示,選擇相應的時區信息。
4. 修改系統時鐘。命令爲:date -s
(1)將時間調整爲10月11日凌晨1點55分:data 10110155
(2)將系統時間設定成2005年8月8日:      date -s 2005/08/08
(3)將系統時間設定成下午8點12分0秒:  date -s 20:12:00
該命令是用來修改系統時鐘的。在系統啓動時,Linux操作系統將時間從CMOS中讀到系統時間變量中,以後修改時間通過修改系統時間實現。爲了保持系統時間與CMOS時間的一致性,Linux每隔一段時間會將系統時間寫入CMOS。由於該同步是每隔一段時間(大約是11分鐘)進行的,在執行完 date -s 命令後,如果馬上重起系統,修改的時間就有可能沒有被寫入CMOS。如果要確保修改生效,最好再使用 clock -w 這個命令將系統時間強行寫入CMOS。
 
 
 
 
 

一.gettimeofday()函數的使用方法:

1.簡介:
在C語言中可以使用函數gettimeofday()函數來得到時間。它的精度可以達到微妙

2.函數原型:
#include<sys/time.h>

int gettimeofday(struct  timeval*tv,struct  timezone *tz )

3.說明:
gettimeofday()會把目前的時間用tv 結構體返回,當地時區的信息則放到tz所指的結構中

4.結構體:
1>timeval

struct  timeval{

   

       long  tv_sec;/*秒*/

       long  tv_usec;/*微妙*/

};

2>timezone 結構定義爲:

struct  timezone{

        int tz_minuteswest;/*和greenwich 時間差了多少分鐘*/

        int tz_dsttime;/*type of DST correction*/

}

3>在gettimeofday()函數中tv或者tz都可以爲空。如果爲空則就不返回其對應的結構體。

4>函數執行成功後返回0,失敗後返回-1,錯誤代碼存於errno中。

5.程序實例:
#include<stdio.h>
#include<sys/time.h>

#include<unistd.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);

}

說明:在使用gettimeofday()函數時,第二個參數一般都爲空,因爲我們一般都只是爲了獲得當前時間,而不用獲得timezone的數值

本篇文章來源於 Linux公社網站(www.linuxidc.com)  原文鏈接:http://www.linuxidc.com/Linux/2012-06/61903.htm

二.gettimeofday()函數的一個常用方法
在測試程序時,往往需要了解程序執行所需的時間,在Linux中可以使用函數gettimeofday來得到時間.

1.程序實例:

測試調用delya()函數所需執行的時間(單位爲微妙)

#include<stdio.h>

#include<sys/time.h>

#include<unistd.h>

 

int delay(int time)

{

    int i,j;

   

    for(i =0;i<time;i++)

        for(j=0;j<5000;j++)

            ;

}

 

int main()

{

        struct  timeval start;

        struct  timeval end;

       

        unsigned  long diff;

        gettimeofday(&start,NULL);

        delay(10);

        gettimeofday(&end,NULL);

diff = 1000000 * (end.tv_sec-start.tv_sec)+ end.tv_usec-start.tv_usec;

        printf(“thedifference is %ld\n”,diff);

        return 0;

       

}

說明:

使用該方法就可以檢測出調用delay()函數所使用的時間

本篇文章來源於 Linux公社網站(www.linuxidc.com)  原文鏈接:http://www.linuxidc.com/Linux/2012-06/61903p2.htm

 
 
 
發佈了39 篇原創文章 · 獲贊 11 · 訪問量 8萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章