C語言settimeofday()函數:設定目前時間戳
標頭檔:
#include <sys/time.h> #include <unistd.h>
定義函數:
int settimeofday(const struct timeval *tv, const struct timezone *tz);
函數說明:settimeofday()會把目前時間設成由tv 所指的結構資訊,當地時區資訊則設成tz 所指的結構。詳細的說明請參考gettimeofday()。
注意,在Linux下,只有root 許可權才能使用此函數修改時間。
傳回值:成功則返回0,失敗返回-1,錯誤碼存於errno。
錯誤碼:
EPERM 並非由root 許可權調用settimeofday(),許可權不夠。
EINVAL 時區或某個資料是不正確的,無法正確設定時間。
C語言gettimeofday()函數:擷取目前時間
標頭檔:
#include <sys/time.h> #include <unistd.h>
定義函數:int gettimeofday (struct timeval * tv, struct timezone * tz);
函數說明:gettimeofday()會把目前的時間有tv 所指的結構返回,當地時區的資訊則放到tz 所指的結構中。
timeval 結構定義為:
struct timeval{ long tv_sec; //秒 long tv_usec; //微秒};
timezone 結構定義為:
struct timezone{ int tz_minuteswest; //和Greenwich 時間差了多少分鐘 int tz_dsttime; //日光節約時間的狀態};
上述兩個結構都定義在/usr/include/sys/time.h. tz_dsttime 所代表的狀態如下
DST_NONE //不使用 DST_USA //美國 DST_AUST //澳洲 DST_WET //西歐 DST_MET //中歐 DST_EET //東歐 DST_CAN //加拿大 DST_GB //大不列顛 DST_RUM //羅馬尼亞 DST_TUR //土耳其 DST_AUSTALT //澳洲(1986 年以後)
傳回值:成功則返回0,失敗返回-1,錯誤碼存於errno。
附加說明:EFAULT 指標tv 和tz 所指的記憶體空間超出存取許可權。
範例
#include <sys/time.h>#include <unistd.h>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);}
執行結果:
tv_sec: 974857339tv_usec:136996tz_minuteswest:-540tz_dsttime:0