要在Linux中从C ++获取cpu信息,我只需使用:
if(!system(“cat / proc / cpuinfo”))cout<< “错误”<< ENDL;
更新:问题是我没有输出
答案 0 :(得分:3)
它告诉你system
返回一个值,而你没有检查它,所以(在这种情况下)如果system
失败,你就不会知道它。
答案 1 :(得分:3)
假设您想在Linux上以编程方式获取有关CPU的信息(而不仅仅是在 stdout 终端上显示/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
,fgets
,sscanf
àCC)....如果您真的想阅读某些命令的输出(在您的情况下是无用的)考虑popen
您可以通过调用uname(2)系统调用(提供的信息少于/proc/cpuinfo
)来感到高兴。
使用 cpufreq 或 cpufrequtils 搜索this
答案 2 :(得分:1)
该函数返回一个值,指示调用是否成功。
你的程序忽略了这个值,这可能会导致潜在的问题。
这就是您收到编译器警告的原因。
答案 3 :(得分:0)
这是一个编译器警告,告诉您您的代码可能不是您想要编写的内容。 C ++中的system
函数返回int
值,通常,其中包含您使用system
运行的命令的状态代码。
在这种情况下,如果该数字不为0(即if(system("cat /proc/cpuinfo") != 0)
),您可能需要进行错误处理。
答案 4 :(得分:0)
Linux有一个名为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”,“型号”或“核心”的内容。