2014-02-20 48 views
2

我試圖從/proc/<pid>/status文件中讀取信息(以獲取使用的內存)。文件/ proc/<pid>上的實時更新/打開時的狀態

要做到這一點,我在讀模式打開文件:

file = fopen("/proc/self/status", "r"); 

此步驟後,得到的記憶,我閱讀了「VmRSS」開頭的行。

我的問題是這樣的:

每次我讀到這條線,這是相同的值,即使文件已經改變。

我這樣做是爲了獲得我的程序的實時內存使用情況。所以我打電話fopen() 1次, ,然後我打電話fseek()去當我需要更新信息時我的文件的開始。

char line[128]; 
fseek(file, 0, SEEK_SET); 
while (fgets(line, 128, file) != NULL) 
{ 
    //... 
} 

但是,文件沒有更新,除非我重新打開它。出於性能原因,我不想重新打開它。

我試圖將「r」更改爲「r +」(根據fopen()的文檔有一個「打開文件以進行更新」),但在這種情況下fopen返回NULL。

所以我的問題:

你對我有多麼的程序可以打開一個文件,並查看更改從僅使用一個呼叫fopen()另一個程序(這裏的內核)所做的任何想法?


注:

我使用Ubuntu 12.04

回答

4

您需要重新打開該文件,以避免競爭條件, PROC是memeory文件系統和大部分的/ proc內容被固定在開。

+0

感謝您的信息。 – Krozark

+0

@Krozark歡迎您 –

相關問題