-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 に関する情報を取得したい場合 (およびへの呼び出しのように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à la C).... コマンドの出力を本当に読みたい場合 (あなたの場合は役に立たない) を検討してください。popen

uname(2)システムコールを呼び出すだけで満足するかもしれません(これは よりもはるかに少ない情報しか提供しません/proc/cpuinfo)。


cpufreqまたはcpufrequtilsをグーグルで検索すると、これが得られます

于 2013-02-03T21:27:41.680 に答える
1

この関数は、呼び出しが成功したかどうかを示す値を返します。

プログラムはこの値を無視しているため、潜在的な問題が発生する可能性があります。

これが、コンパイラの警告が表示される理由です。

于 2013-02-03T21:26:01.997 に答える
0

popenLinux には、端末コマンドの stdout にフックできるようにするという独自の open 関数があります。

次のコードを使用して、端末コマンドからの出力を読み取ることができます。

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 に答える
0

これは、コードが意図したものではない可能性があることを知らせるコンパイラ警告です。systemC++の関数は、通常、実行したコマンドのステータス コードを含むint値を返します。system

この場合、その数値が 0 でない場合 (つまりif(system("cat /proc/cpuinfo") != 0))、エラー処理が必要になる場合があります。

于 2013-02-03T21:28:02.787 に答える