c - 打开时实时更新文件/proc/<pid>/status

标签 c linux kernel ubuntu-12.04

我正在尝试从 /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/

相关文章:

c++ - 如何在 Windows 中获取登录用户的 SID

c++ - C语言编程——寻找素数

linux - 有什么方法可以获取搜索模式 PDF 中的页码吗?

linux - linux脚本中这个链接的含义是什么

c - 将 char 附加到没有值的字符串

c - 指针算术和 malloc()/calloc() 函数

linux - Apache 和 selinux,使用 linux 命令检索文件

c - Linux驱动程序中的结构文件

c - 在内核程序中获取 root 用户 id 并与当前用户 id 进行比较

c - 如何从 linux 内核中的目录获取文件列表?