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;
}
내가 뭔가 잘못하고 있는가 어떻게 든 문자열을 포맷해야합니까?
"내가 잘못하고 있니?" - 당신이 껍데기를 부르는 단순한 사실에 근거하여 '예'라고 말하고 싶습니다. 이것만으로도 거대한 경종을 울리고 많은 붉은 깃발이 생깁니다. * 적어도 * * 매우 신중하게 - 입력 된 args를 신중하게 검사하고, 환경이 정상적으로 작동하는지 확인하고, 오류를 확인하고, 사용자가 의도 한 실행 파일을 실행하는지 확인하는 등의 작업을 수행해야합니다. –
명령 자체가 쉘에서 작동합니까? – Drop
여기에서 읽기 시작하십시오 : http://man7.org/linux/manage/man2/pipe.2.html –