最新在QT上开发应用程序的过程,需要对应用程序运行过程中Linux设备的内存使用率等进行显示,在Linux设备内存占用较高时给用户提示!
由于本人对Linux系统任务管理器的原理,不能直接从任务管理器中得到Linux 设备CPU的占用率,于是就采用间接办法来获取CPU信息。
Linux系统信息一般都能在/proc/目录下查看cpuinfo,meminfo文件来获取,通过读取解析这些文件,关于Linux设备的消息都能获取到,然后在界面上以不同形式显示出来。
查看/proc/下meminfo 文件信息如下图:
文件格式比较统一,可以通过解析文件获取所需参数的值。
本人实现方法如下:
//parse meminfo file
QString val;
QFile file;
file.setFileName("/proc/meminfo");
file.open(QIODevice::ReadOnly | QIODevice::Text);
val = file.readAll(); //将整个文件内容转化成字符串
QStringList strList = QString(val).split('\n'); //通过“\n”将整个文件内容按字符串进行存储
QString stringTmp;
for(int i = 0; i != strList.size(); i++)
{
stringTmp = strList.at(i);
if(!(stringTmp.isEmpty()))
{
QStringList strListTmp = QString(stringTmp).split(':');
for(int j = 0; j != strListTmp.size(); j++)
{
mMapMemoryFile.insert(strListTmp.at(0),strListTmp.at(1)); //将每个字符串的“key” 、"value"解析出来存入一个Map中方便查找
}
}
}
QMap<QString,QString>::iterator iter1 = mMapMemoryFile.find("MemTotal");
QString tpuMemTotalStr = (iter1.value()).trimmed();
int index1 = tpuMemTotalStr.indexOf("kB");
QString tpuMemTotal = tpuMemTotalStr.left(index1); //将value中的“kB”去掉,只保留数值
QMap<QString,QString>::iterator iter2 = mMapMemoryFile.find("MemFree");
QString tpuMemFreeStr = (iter2.value()).trimmed();
int index2 = tpuMemFreeStr.indexOf("kB");
QString tpuMemFree = tpuMemFreeStr.left(index2);