要在 Linux 中从 C++ 获取 cpu 信息,我只需使用:
if (!system("cat /proc/cpuinfo")) cout << "错误" << endl;
更新:问题是我没有输出
要在 Linux 中从 C++ 获取 cpu 信息,我只需使用:
if (!system("cat /proc/cpuinfo")) cout << "错误" << endl;
更新:问题是我没有输出
它告诉您system
返回一个值,而您没有检查它,因此(在这种情况下)如果system
失败,您将不知道它。
假设您想在 Linux 上以编程方式获取有关 CPU 的信息(而不仅仅是/proc/cpuinfo
在标准输出终端上显示,就像您的调用system
那样),您应该更好地阅读文件/proc/cpuinfo
,例如
ifstream fcp("/proc/cpuinfo");
std::string lin;
while (!fcp.eof()) {
lin = fcp.getline ();
// parse appropriately the file fcp, e.g.
if (lin.find("vendor_id") >= 0)
// do something useful
上面的代码片段不完整。您必须完成它才能从/proc/cpuinfo
您真正想要的信息中提取。
当然,您可以通过其他方式阅读(/proc/cpuinfo
例如fopen
,,à la C)....如果您真的想阅读某些命令的输出(在您的情况下它是无用的)考虑fgets
sscanf
popen
只需调用uname(2)系统调用(它提供的信息远少于) ,您可能会很高兴/proc/cpuinfo
。
谷歌搜索cpufreq或cpufrequtils给出了这个
该函数返回一个值,指示调用是否成功。
您的程序忽略了这个值,这可能会导致潜在的问题。
这就是您收到编译器警告的原因。
这是一个编译器警告,告诉您您的代码可能不是您想要编写的。system
C++ 中的函数返回一个值,该int
值通常包含您运行的命令的状态代码system
。
在这种情况下,如果该数字不是 0(即if(system("cat /proc/cpuinfo") != 0)
),您可能需要进行错误处理。
Linux 有一个独特的 open 函数popen
,它允许您连接到终端命令的标准输出。
您可以使用以下代码读取终端命令的任何输出:
FILE *pF = popen(aCmd, "r");
if(!pF)
{
return "ERROR";
}
char cChar = '\0';
std::string rtnStr = "";
while(!feof(pF))
{
cChar = fgetc(pF);
if(cChar == '\n')
{
break;
}
rtnStr += cChar;
}
并使用命令cat /proc/cpuinfo
获取 CPU 信息。您还可以在| grep
后面添加诸如“MHz”、“型号”或“核心”之类的内容以获取详细信息。