2013-02-03 52 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」之類的內容以獲取具體信息。