Linux で C++ から CPU 情報を取得するには、次のようにします。
if (!system("cat /proc/cpuinfo")) cout << "エラー" << endl;
更新:問題は、出力がないことです
Linux で C++ から CPU 情報を取得するには、次のようにします。
if (!system("cat /proc/cpuinfo")) cout << "エラー" << endl;
更新:問題は、出力がないことです
それは値を返すことを伝えてsystem
おり、それをチェックしていないため、(この場合)system
失敗した場合、それについてはわかりません。
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をグーグルで検索すると、これが得られます
この関数は、呼び出しが成功したかどうかを示す値を返します。
プログラムはこの値を無視しているため、潜在的な問題が発生する可能性があります。
これが、コンパイラの警告が表示される理由です。
popen
Linux には、端末コマンドの 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」、「モデル」、「コア」などの後に追加することもできます。
これは、コードが意図したものではない可能性があることを知らせるコンパイラ警告です。system
C++の関数は、通常、実行したコマンドのステータス コードを含むint
値を返します。system
この場合、その数値が 0 でない場合 (つまりif(system("cat /proc/cpuinfo") != 0)
)、エラー処理が必要になる場合があります。