1
私は、この例のようなコードを使用して、C++内のLinuxシェルコマンドに結果を得ました。基本的なコマンドでうまくいくようです。私はシェルのエラーを取得する例のコマンドでそれを実行しようとするただし、:予期しないトークンの近くに構文エラー `(」C++で複雑なシェルコマンドを実行する適切な方法は何ですか?
#include <stdio.h>
#include <iostream>
int main(int argc, char *argv[]) {
std::string cmdString = "cat <(grep 'cpu ' /proc/stat) <(sleep 1 && grep 'cpu ' /proc/stat) | "
"awk -v RS=\"\" '{print ($13-$2+$15-$4)*100/($13-$2+$15-$4+$16-$5) }' 2>&1";
std::string result, file;
FILE *stream;
std::cout << "cmdString = " << cmdString << std::endl;
stream = popen(cmdString.c_str(), "r");
char buffer[256];
if(fgets(buffer, sizeof(buffer), stream) != NULL) {
file = buffer;
result += file.substr(0, file.size() - 1);
}
pclose(stream);
std::cout << "result = " << result << std::endl;
return 0;
}
私が何か間違ったことをやっている私は何とか文字列を再フォーマットする必要がありますか?
「私は何か間違っていますか?」 - あなたがシェルに呼び出すという単純な事実に基づいて、私は「はい」と言います。それだけで巨大な警鐘が鳴り、多くの赤旗が浮上します。 *非常に*少なくとも*慎重に入力慎重にチェックし、環境が正常であることを確認し、エラーをチェックし、あなたが本当に意図している実行可能ファイルを実行しているかどうかなどを確認します。 –
これはありますかコマンド自体はシェルで動作しますか? – Drop
ここから読んでください:http://man7.org/linux/man-pages/man2/pipe.2.html –