从C ++运行命令

时间:2013-02-03 21:24:04

标签: c++ linux command-line

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

  

if(!system(“cat / proc / cpuinfo”))cout<< “错误”<< ENDL;

更新:问题是我没有输出

5 个答案:

答案 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(例如fopenfgetssscanfà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”,“型号”或“核心”的内容。