linux時間相關結構體和函式整理

2022-02-06 02:16:48 字數 2860 閱讀 4447

一、時間型別。linux下常用的時間型別有4個:time_t,struct timeb, struct timeval,struct timespec,clock_t, struct tm.

(1)time_t是乙個長整型,一般用來表示用2023年以來的秒數.

該型別定義在中.

一般通過 time_t time = time(null); 獲取.

(2)struct timeb結構: 主要有兩個成員, 乙個是秒, 另乙個是毫秒, 精確度為毫秒.

1

struct

timeb

2;

由函式int ftime(struct timeb *tp); 來獲取timeb. 成功返回0, 失敗返回-1.

(3)struct timeval有兩個成員,乙個是秒,乙個是微妙.

1

struct

timeval

2;

由int gettimeofday(struct timeval *tv, struct timezone *tz);獲取. struct timezone結構的定義為:

1

struct

timezone

2;

(4)struct timespec有兩個成員,乙個是秒,乙個是納秒, 所以最高精確度是納秒.

1

struct

timespec

2;

一般由函式long clock_gettime (clockid_t which_clock, struct timespec *tp); 獲取.

獲取特定時鐘的時間,時間通過tp結構傳回,目前定義了6種時鐘,分別是

clock_realtime                                         系統當前時間,從2023年1.1日算起

clock_monotonic                                    系統的啟動時間,不能被設定

clock_process_cputime_id               程序執行時間

clock_thread_cputime_id                 執行緒執行時間

clock_realtime_hr                                clock_realtime的高精度版本

clock_monotonic_hr                           clock_monotonic的高精度版本

獲取特定時鐘的時間精度:

long clock_getres(clockid_t );

long clock_settime(clockid_t ,struct timespec*);

long clock_nanosleep(clockid_t ,int flag,timespec* time,timespec* left_time);

(5)clock_t型別, 由clock_t clock(); 返回獲取. 表示程序占用的cpu時間. 精確到微秒.

(6)struct tm是直觀意義上的時間表示方法:

1

structtm2

;13struct tm* gmtime(const time_t *timep);

1415

struct tm* localtime(const time_t *timep);

1617 time_t mktime(struct tm *tm);

gmtime和localtime的引數以及返回值型別相同,區別是前者返回的格林威治標準時間,後者是當地時間.

注意: 這邊三個函式都是執行緒不安全的, 要使用執行緒安全的版本, 需要使用帶_r的版本 — gmtime_r, localtime_r, mktime_r.

二、 延遲函式

主要的延遲函式有:sleep(), usleep(), nanosleep(), select(), pselect().

1 unsigned int sleep(unsigned int

seconds);

2void usleep(unsigned long

usec);

3int nanosleep(const

struct timespec *req, struct timespec *rem);

4int

select(int n, fd_set *readfds, fd_set *writefds, fd_set *exceptfds,struct timeval *timeout);

5int pselect(int n, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, const

struct timespec *timeout, const sigset_t *sigmask);

alarm函式是訊號方式的延遲,這種方式不直觀,這裡不說了。 僅通過函式原型中時間引數型別,可以猜測sleep可以精確到秒級,usleep/select可以精確到微妙級,nanosleep和pselect可 以精確到納秒級。 而實際實現中,linux上的nanosleep和alarm相同,都是基於核心時鐘機制實現,受linux核心時鐘實現的影響,並不能達到納秒級的精 度,man nanosleep也可以看到這個說明,man裡給出的精度是:linux/i386上是10 ms ,linux/alpha上是1ms

linux時間相關結構體和函式整理

一 時間型別。linux下常用的時間型別有4個 time t,struct timeb,struct timeval,struct timespec,clock t,struct tm.1 time t是乙個長整型,一般用來表示用1970年以來的秒數.該型別定義在中.一般通過 time t time...

Linux時間結構體和獲得時間函式

關於linux下時間程式設計的問題 1.linux下與時間有關的結構體 struct timeval int tv sec int tv usec 其中tv sec是由凌晨開始算起的秒數,tv usec則是微秒 10e 6 second struct timezone int tv minutesw...

linux下時間有關的函式和結構體

1 時間型別。linux下常用的時間型別有4個 time t,struct timeb,struct timeval,struct timespec,clock t,struct tm.1 time t是乙個長整型,一般用來表示用1970年以來的秒數.該型別定義在中.一般通過 time t time...