2013-02-03 49 views
-3

一个命令,以从C++在Linux中,我纯粹使用CPU信息:运行从C++

如果(!系统( “猫的/ proc/cpuinfo中”))清点< < “错误” < < ENDL;

UPDATE:问题是,我没有得到任何出把

+2

...和十亿美元的问题是? –

+0

什么部分的消息你不明白? – SLaks

+0

我没有输出。输出被忽略 –

回答

3

它告诉你,system返回一个值,你不检查,所以(在这种情况下),如果system失败了,你赢了不知道。

1

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

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

这就是为什么你会得到编译器警告。

3

假设你想获得有关CPU编程Linux上的信息(而不是仅仅显示标准输出终端上/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点菜C)......如果你真的想读一些命令的输出(在你的情况下,它是无用的)考虑popen

只需拨打uname(2)系统调用(它比/proc/cpuinfo提供的信息要少得多),您可能很高兴。


谷歌搜索CPU频率cpufrequtilsthis

+0

谢谢!至少有一个人读我的第一个问题,我说“我没有得到任何信息”。尽管如此,我并不真正了解你的意思。我只想看看所有的信息。我能做什么?为什么我的代码不显示任何内容? –

+0

你想要什么信息来自'/ proc/cpuinfo'?如果你想向用户显示所有'/ proc/cpuinfo',只需按照我的建议读取该文件并显示它的每一行,例如在'lin = fcp.getline();'语句之后加'std :: out << lin << std :: endl;'。 –

+0

运行时的CPU速度 –

0

这是一个编译器警告,告诉您的代码可能不是你写。 C++中的system函数返回int的值,通常为,其中包含您使用system运行的命令的状态代码。

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

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”,“model”或“c​​ores”之类的内容以获取具体信息。