-4

要在 Linux 中从 C++ 获取 cpu 信息,我只需使用:

if (!system("cat /proc/cpuinfo")) cout << "错误" << endl;

更新:问题是我没有输出

4

5 回答 5

3

它告诉您system返回一个值,而您没有检查它,因此(在这种情况下)如果system失败,您将不知道它。

于 2013-02-03T21:25:39.270 回答
3

假设您想在 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)....如果您真的想阅读某些命令的输出(在您的情况下它是无用的)考虑fgetssscanfpopen

只需调用uname(2)系统调用(它提供的信息远少于) ,您可能会很高兴/proc/cpuinfo


谷歌搜索cpufreqcpufrequtils给出了这个

于 2013-02-03T21:27:41.680 回答
1

该函数返回一个值,指示调用是否成功。

您的程序忽略了这个值,这可能会导致潜在的问题。

这就是您收到编译器警告的原因。

于 2013-02-03T21:26:01.997 回答
0

这是一个编译器警告,告诉您您的代码可能不是您想要编写的。systemC++ 中的函数返回一个值,该int通常包含您运行的命令的状态代码system

在这种情况下,如果该数字不是 0(即if(system("cat /proc/cpuinfo") != 0)),您可能需要进行错误处理。

于 2013-02-03T21:28:02.787 回答
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”、“型号”或“核心”之类的内容以获取详细信息。

于 2013-02-04T20:13:33.237 回答