時間結構有struct timespec 和struct timeval

在Linux中常用的時間結構有struct timespec 和struct timeval 。
下面是兩個結構的定義
struct timespec
{
    __time_t tv_sec;        /* Seconds. */
    long   tv_nsec;       /* Nanoseconds. */
};
struct timeval {
        time_t tv_sec;  
        suseconds_t tv_usec;
}; 
兩者的區別是timespec的第二個參數是納秒數,而timeval的第二個參數是毫秒數。


如何通過這兩個結構獲取系統的當前時間
struct timespec
可以通過 int clock_gettime(clockid_t clk_id, struct timespec *tp)來獲取


參數 clk_id : 檢索和設置的clk_id指定的時鐘時間。可以設置如下:
        CLOCK_REALTIME:系統實時時間,隨系統實時時間改變而改變,即從UTC1970-1-1 0:0:0開始計時,如果系統時間被用戶改成其他,則對應的時間相應改變
        CLOCK_REALTIME_COARSE:和CLOCK_REALTIME類似,但是執行速度快,精度低
  CLOCK_MONOTONIC:從系統啓動這一刻起開始計時,不受系統時間被用戶改變的影響
        CLOCK_MONOTONIC_COARSE :和CLOCK_MONOTONIC類似,但是執行速度快,精度低
        CLOCK_BOOTTIME:和  CLOCK_MONOTONIC 類似,但是包括了系統休眠的時間。
  CLOCK_PROCESS_CPUTIME_ID:本進程到當前代碼系統CPU花費的時間
  CLOCK_THREAD_CPUTIME_ID:本線程到當前代碼系統CPU花費的時間
參數:tp 返回時間值
返回值 0成功, 1失敗。
例如 
struct timespec ts;
clock_gettime(CLOCK_REALTIME, &ts);


struct timeval 
可以通過int gettimeofday(struct timeval *tv, struct timezone *tz);來獲取
參數:struct timeval *tv 將帶回當前的系統時間,從UTC1970-1-1 0:0:0開始計時
      struct timezone *tz 帶回當前的時區信息,如果不需要刻意設置爲0
timezone結構描述如下:     
struct timezone
{
    int tz_minuteswest;  //和格林威治 時間差了多少分鐘
    int tz_dsttime;  //日光節約時間的狀態(夏時制)
};
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章