linux應用層中的setitimer的使用說明
使用時需要引入的標頭檔案:
#include
setitimer函式原型:
int setitimer(int which, const struct itimerval *new_value,
struct itimerval *old_value);
其中which引數表示型別,可選的值有:
itimer_real: 以系統真實的時間來計算,它送出sigalrm訊號。
itimer_virtual:以該程序在使用者態下花費的時間來計算,它送出sigvtalrm訊號。
itimer_prof: 以該程序在使用者態下和核心態下所費的時間來計算,它送出sigprof訊號。
緊接著的new_value和old_value均為itimerval結構體,先看一下itimerval結構體定義:
struct itimerval ;
struct timeval ;
itimeval又是由兩個timeval結構體組成,timeval包含tv_sec和tv_usec兩部分,其中tv_se為秒,tv_usec為微秒(即1/1000000秒)
其中的new_value引數用來對計時器進行設定,it_interval為計時間隔,it_value為延時時長。
settimer工作機制是,先對it_value倒計時,當it_value為零時觸發訊號,然後重置為it_interval,繼續對it_value倒計時,一直這樣迴圈下去。
基於此機制,setitimer既可以用來延時執行,也可定時執行。
注意:假如it_value為0是不會觸發訊號的,所以要能觸發訊號,it_value得大於0;如果it_interval為零,只會延時,不會定時(也就是說只會觸發一次訊號)。
old_value引數,通常用不上,設定為null,它是用來儲存上一次setitimer呼叫時設定的new_value值。
下面例子中表示的是在setitimer方法呼叫成功後,延時1微秒便觸發一次sigalrm訊號,以後每隔1秒觸發一次sigalrm訊號。
#include #include #include #include void signalhandler(int signo)
}int main(int argc, char *argv)
return 0;
}
此外,在應用過程中還需要注意:
setitimer乙個程序中只能有乙個 下乙個會覆蓋前乙個的定時 想乙個程序多個定時器只能自己實現。
setitimer() 不支援在同一程序中同時使用多次以支援多個定時器。
linux有關定時器(setitimer)的敘述是這樣的:
linux系統給每個程序提供了3個定時器,每個定時器在各自不同的域裡面計數。當任何乙個timer計數到結束了,系統就傳送乙個訊號(signal)給該程序,同時計數器重置。
Linux應用層時間函式
include time t time time t ptr 這個函式返回從unix新紀元 1970年1月1日00 00 00 utc 開始到現在經過的秒數,並且是按照utc協調時間進行計算,統稱為日曆時間。它的精度是秒。include int clock gettime clockid t clo...
Linux應用層的析解
在使用者空間進行程式設計時會使用許多標頭檔案,比如unistd.h,stdlib.h等等,這裡面所有的函式,變數,巨集等都處於使用者空間,被編譯鏈結在庫中。對於linux作業系統,庫的底層會呼叫系統呼叫,這種呼叫不是通過呼叫核心函式實現 這樣就會出現重定位核心函式名位址的問題 而是將系統呼叫號 就是...
表示層 應用層
表示層 功能 為異種機通訊提供一種公共語言,以便能進行互操作。這種型別的服務之所以需要,是因為不同的計算機體系結構使用的資料表示法不同。例如,ibm主機使用ebcdic編碼,而大部分pc機使用的是ascii碼。在這種情況下,便需要表示層來完成這種轉換。應用層 包含了通常要使用的協議 http協議 超...