我用这种方式阅读/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;
}
}
我注意到在极少数情况下std::getline
会挂起。
getline
返回false
。/proc/<pid>/status
的方式是什么? 答案 0 :(得分:0)
也许更有把握的途径是将fread用于大缓冲区。状态文件很小,因此请分配本地缓冲区并读取整个文件。
Example查看最简单解决方案的第二个答案
这可能仍然会对fopen或fread失败,但应该返回合理的错误。
答案 1 :(得分:-2)
/proc is a virtual filesystem。这意味着从&#34;文件&#34;在它中与从普通文件系统读取不同。
如果进程退出,则有关它的信息会从/ proc中删除的速度比真正的文件系统快(这里涉及脏缓存刷新延迟)。
请记住,在您阅读尚未缓冲的下一行之前,该流程会退出。
解决方案要么考虑文件丢失,因为您可能不需要有关不再存在的进程的信息,要么缓冲整个文件,然后只解析它。
编辑:进程中的挂起应该与这是虚拟文件系统这一事实有关。它的行为与真实文件系统的行为完全不同。由于这是特定的fs类型,因此问题可能出在fs驱动程序中。您提供的代码看起来很适合正常的文件读取。