**:
在linux開發版最長問到的問題之一就是在linux下如何得到更精確的計時。其實有很多辦法,比如以前就有人用select。不過現在有更精確的實時時鐘可以用,這就是用clock_process_cputime_id做引數通過timer_create來建立timer。通過clock_getres可以得到系統的精度。
實際上,上述方法底層用的就是cpu的rdtsc指令。 在linux下,可以用到cpu的rdtsc指令(當然,windows下也是這樣。現在的cpu一般都支援這個指令)來得到乙個cpu的時間戳(time stamp),這個值是每個指令週期都增加的,再根據cpu的頻率就可以計算出時間來。用這種方式,對於頻率高的cpu,甚至可以實現納秒級的時間控制。不過據說因為精度太高,這種方式資料抖動比較厲害,每次結果都不一樣,經常有幾百甚至上千的差距。不過在我的實驗中誤差並沒有這麼大,上下在1%左右,不過如果你的要求高的話,這1%也是很厲害的。不過sleep呼叫也是會有誤差的,這裡就不去研究了。
下面是原始碼:
<
stdio.h
>
intget_rdtsc()
intmain()
我的實驗環境:intel e6320/2g,使用vmware虛擬機器,系統是centos5-x86。下面是輸出結果。
t2 - t1 = 1865320163 (1865mhz)
t2 - t1 = 1865996702 (1865mhz)
t2 - t1 = 1862758710 (1862mhz)
t2 - t1 = 1865247214 (1865mhz)
t2 - t1 = 1863456686 (1863mhz)
t2 - t1 = 1865427930 (1865mhz)
t2 - t1 = 1865423429 (1865mhz)
t2 - t1 = 1863616999 (1863mhz)
t2 - t1 = 1865105795 (1865mhz)
t2 - t1 = 1867224090 (1867mhz)
額外的rdtsc實現
static
inline
unsigned
long
long
rdtsc(
void
)
用expect(TCL)實現Linux下的互動
現代的shell對程式提供了最小限度的控制 開始,停止,等等 而把互動的特性留給了使用者。這意味著有些程式,你不能非互動的執行,比如說passwd。有一些程式可以非互動的執行,但在很大程度上喪失了靈活性,比如說su,ssh等。這表明linux的工具構造邏輯開始出現問題。expect恰恰填補了 其中的...
用Linux下的rsync命令實現多伺服器映象同步
用linux系統中的rsync命令實現當使用者在本地客戶端某目錄內建立 修改 刪除目錄或檔案 修改目錄或檔案的屬性,只要執行相同的shell 腳 本,rsync就會自動找出有改動或刪除的資料,將其傳送到伺服器上,使linux伺服器端某目錄內的資料跟本地客戶端某目錄內的資料保持一致。方式一 一 伺服器...
Linux下用UDP實現檔案傳輸
原文 udp程式設計框圖 udp協議中伺服器和客戶端的互動存在於資料的收發過程中。進行網路資料收發的時候,伺服器和客戶端的資料是對應的 客戶端傳送資料的動作,對伺服器來說是接收資料的動作 客戶端接收資料的動作,對伺服器來說是傳送資料的動作。實現檔案的傳輸大概分為這幾個步驟 客戶端讀檔案,將內容放在c...