【发布时间】:2014-04-27 23:42:58
【问题描述】:
我正在制作一个磁盘实用工具,它获取磁盘统计信息(在 linux 中)并从中计算值。我的基本问题是,当 system() 调用发生时,程序挂在那里。
system("grep 'sda ' /proc/diskstats | tee \"report.txt\"");
ifstream inStream;
inStream.open("report.txt");
if (inStream.fail()) {
cout << "Report gathering failed." << endl;
return;
}
while (!inStream.eof()) {
inStream.ignore();
inStream.ignore();
inStream.ignore();
inStream >> numReads1;
inStream.ignore();
inStream >> sectorReads1;
inStream.ignore();
inStream >> numWrites1;
inStream.ignore();
inStream >> sectorWrites1;
inStream.ignore();
inStream.ignore();
inStream.ignore();
inStream.ignore();
}
【问题讨论】:
-
您的程序上的
ptrace可能会发现有趣的数据。 -
我会先使用
popen而不是system。 -
您是否能够在 bash shell 中运行该命令,而与您的程序无关?正常结束吗?
-
有比使用
system和中间文件更好的 C++ 方法:PStreams、Boost.Process、POCO Process - 其中大部分是围绕popen的包装器。跨度> -
你真的要使用
tee吗?尝试使用输出重定向>将管道替换为 tee。