我正在尝试从 /proc/<pid>/status
读取信息文件(以获取使用的内存)。
为此,我以读取模式打开文件:
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
最佳答案
您需要重新打开文件以避免竞争情况, proc 是内存中的文件系统,大多数/proc 内容都固定在打开状态。
关于c - 打开时实时更新文件/proc/<pid>/status,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21908879/