我正在讀取/ proc/pid/task/stat以跟蹤線程中的cpu使用情況。 的fopen上的/ proc/PIC /任務/ STAT fget從流 sscanf的對我有但得到的流緩存更新的問題串讀取/ proc時刷新流緩衝區
的字符串。 如果我fget 1024個字符,如果更換,但如果我fget 128個字符,那麼它永遠不會更新,我總是得到相同的統計數據。 我在讀取之前回滾流並嘗試了fsync。
我這樣做很頻繁,所以我寧願不重新打開文件每次。 什麼是正確的方法來做到這一點?
我正在讀取/ proc/pid/task/stat以跟蹤線程中的cpu使用情況。 的fopen上的/ proc/PIC /任務/ STAT fget從流 sscanf的對我有但得到的流緩存更新的問題串讀取/ proc時刷新流緩衝區
的字符串。 如果我fget 1024個字符,如果更換,但如果我fget 128個字符,那麼它永遠不會更新,我總是得到相同的統計數據。 我在讀取之前回滾流並嘗試了fsync。
我這樣做很頻繁,所以我寧願不重新打開文件每次。 什麼是正確的方法來做到這一點?
並非每個程序都從使用緩衝I/O中受益。
在你的情況,我想我只會用read(2)
。這樣一來,您:
對於您所描述的情況,效率增益可能不會影響當今功能非常強大的CPU。但我會指出,諸如cp(2)
和其他重型數據移動器的程序不使用緩衝I/O軟件包。
1。也就是說,open(2)
,read(2)
,lseek(2)
,和close(2)
。
2.也許要攔截一個論點,在與這個問題有關的問題上,某人通常會沿着fflush(stdin)
提供一個「有幫助」的建議,然後另一個人來精確指出fflush()
由C99在輸出流上定義只有依靠實現特定的行爲通常是不明智的。
我打算嘗試從fopen轉換到明天打開。希望這會更好。 – 2011-01-21 01:11:47