2014-09-27 89 views
1

我想讀取proc文件/ proc //狀態的最後n個字節。如何從C中的proc文件中讀取最後n個字節

在常規文件,我可以像文件的末尾FSEEK:

fseek(proc_file, -BUF_SIZE, SEEK_END); 

但由於proc文件大小爲零,這是行不通的。

關於如何從結尾讀取的任何建議?

我肯定要避免循環到最後。

回答

1

狀態文件很小。剛開始的10000字節:

int fileLen = fread(statusFile, buffer, 10000); 

fread將返回文件中的字節數以及文件的內容。然後您可以檢查文件的結尾。

只讀最後幾個字節沒有優勢。文件I/O系統被緩衝,即使只有幾個字節也會導致底層讀取幾個k。

+0

我敢打賭,1024字節應該足夠了。我做了$(ls -1/proc | egrep'^ [0-9] + $')的文件。做wc -c/proc/$ file/status 2>/dev/null;完成|在我的系統上排序爲「n」,最小值爲532,而最大值爲850.可能在保守方面出錯,並執行4096. – mpontillo 2014-09-27 02:56:10

+2

WRT緩衝:對於普通文件系統,這是正確的,但對於procfs,* not * true。它不支持塊設備,所以沒有緩存。讀操作由內核直接完成。 – duskwuff 2014-09-27 04:32:13

+0

@Mike我已經看到它特別在羣集上超過1k,但是我也最終使用4k。 – 2014-09-28 07:57:35

相關問題