我正在尝试从/proc/<pid>/status
文件中读取信息(以获取使用的内存)。
为此,我以读取模式打开文件:
file = fopen("/proc/self/status", "r");
在此步骤之后,为了获取内存,我读取了以“VmRSS”开头的行。
我的问题是:
每次我读这行时,即使文件已经改变,它也是相同的值。
我这样做是为了获得我程序的实时内存使用情况。所以我打电话给fopen()
一次,
然后当我需要更新信息时,我会调用fseek()
转到文件的开头。
char line[128];
fseek(file, 0, SEEK_SET);
while (fgets(line, 128, file) != NULL)
{
//...
}
但是,除非重新打开,否则文件不会更新。出于性能原因,我不想重新打开它。
我尝试将“r”更改为“r +”(根据fopen()的文档有一个“打开文件进行更新”),但在这种情况下fopen返回NULL。
所以我的问题:
您是否知道我的程序如何打开文件并看到其他程序(此处为内核)只使用一次fopen()
调用所做的更改?
我使用的是Ubuntu 12.04
答案 0 :(得分:4)
您需要重新打开文件以避免竞争条件, proc是memeory中的文件系统,大多数/ proc内容正在打开时修复。
答案 1 :(得分:0)
也许您可以使用 open 而不是 fopen 打开 ## <----A---->|<-B->
[ [ 0., 1., 2., 0. ],
[ 0., 3., 5., 1. ] ]
文件。
/proc/<pid>/status