正确的阅读方式/ proc/pid/status

lst*_*kov 6 c++ linux string std procfs

我这样读/proc/<pid>/status:

std::ifstream file(filename);
std::string line;
int numberOfLinesToRead = 4;
int linesRead = 0;

while (std::getline(file, line)) {
    // do stuff
    if (numberOfLinesToRead == ++linesRead) {
        break;
    }
}
Run Code Online (Sandbox Code Playgroud)

我注意到在极少数情况下会std::getline挂起.

  1. 为什么会这样?我觉得proc文件系统应该处于一定的一致状态,并且不应该出现缺少换行的情况.我的假设是当发生EOF /错误时getline返回false.
  2. 什么是推荐的,安全的阅读方式/proc/<pid>/status

Mat*_*her 0

也许更可靠的方法是使用 fread 进入大缓冲区。状态文件很小,因此分配一个本地缓冲区并读取整个文件。

示例 查看最简单解决方案的第二个答案

这可能仍然会在 fopen 或 fread 上失败,但应该返回一个明智的错误。