我在使用Qt解析/proc/stat
时遇到问题。
我遇到的问题是QFile
状态/proc/stat
是开放的和可读。
尝试单独阅读这些行时,QTextStream
显然表明流已完成,但我知道运行cat /proc/stat
并非如此。
while
循环中的所有代码都没有执行。有什么建议或意见吗?
int UsageStatistics::handle_timeout(const ACE_Time_Value& currentTime, const void* param) {
INFO("Handling timeout\n");
QFile file(QString("/proc/stat"));
if (!file.open(QIODevice::ReadOnly)) {
ERROR("Unable to open file %s, aborting\n", file.fileName().toStdString().c_str());
return false;
}
if (!file.isReadable()) {
ERROR("Unable to read file %s, aborting\n", file.fileName().toStdString().c_str());
return false;
}
QTextStream in(&file);
while (!in.atEnd()) {
QString line = in.readLine();
INFO("%s\n", line.toStdString().c_str());
/// processing
}
file.close();
return true;
}
答案 0 :(得分:5)
/ proc / stat是一个很小的文件,没有任何巨大的风险。只需将readAll()放入QByteArray(没有atEnd()检查,你已经完成了isReadable()),然后在字节数组中指向QTextStream,如果你想以同样的方式解析它。
QFile file(QString("/proc/stat"));
if (!file.open(QIODevice::ReadOnly)) {
qDebug("Unable to open file %s, aborting\n",
qPrintable(file.fileName()));
ui->plainTextEdit->appendPlainText("Error can't open");
return;
}
if (!file.isReadable()) {
qDebug("Unable to read file %s, aborting\n",
qPrintable(file.fileName()));
ui->plainTextEdit->appendPlainText("Error can't read");
return;
}
QByteArray contents = file.readAll();
QTextStream in(&contents);
while (!in.atEnd()) {
QString line = in.readLine();
qDebug("Read: %s\n", qPrintable(line));
ui->plainTextEdit->appendPlainText(line);
}
ui->plainTextEdit->appendPlainText("Done reading.");
file.close();
我刚刚验证了我的系统和你的系统一样,然后尝试了这个基于readAll()的方法并且它有效。
答案 1 :(得分:0)
您正在使用cpuRegex.exactMatch
,它正在寻找完全匹配整行。您正在寻找的线路上还有其他信息。请尝试使用cpuRegex.indexIn(line) == 0
。