728x90
반응형
질문 : POSIX를 사용하여 C ++에서 명령을 실행하고 명령의 출력을 얻으려면 어떻게해야합니까?
C ++ 프로그램 내에서 실행될 때 명령의 출력을 얻는 방법을 찾고 있습니다. system()
함수를 사용해 보았지만 명령 만 실행합니다. 내가 찾고있는 것의 예는 다음과 같습니다.
std::string result = system("./some_command");
임의의 명령을 실행하고 출력을 얻어야합니다. boost.org를 살펴 보았지만 필요한 것을 얻을 수있는 것을 찾지 못했습니다.
답변
676
#include <cstdio>
#include <iostream>
#include <memory>
#include <stdexcept>
#include <string>
#include <array>
std::string exec(const char* cmd) {
std::array<char, 128> buffer;
std::string result;
std::unique_ptr<FILE, decltype(&pclose)> pipe(popen(cmd, "r"), pclose);
if (!pipe) {
throw std::runtime_error("popen() failed!");
}
while (fgets(buffer.data(), buffer.size(), pipe.get()) != nullptr) {
result += buffer.data();
}
return result;
}
C ++ 11 이전 버전 :
#include <iostream>
#include <stdexcept>
#include <stdio.h>
#include <string>
std::string exec(const char* cmd) {
char buffer[128];
std::string result = "";
FILE* pipe = popen(cmd, "r");
if (!pipe) throw std::runtime_error("popen() failed!");
try {
while (fgets(buffer, sizeof buffer, pipe) != NULL) {
result += buffer;
}
} catch (...) {
pclose(pipe);
throw;
}
pclose(pipe);
return result;
}
popen
및 pclose
를 Windows의 경우 _popen
및 _pclose
출처 : https://stackoverflow.com/questions/478898/how-do-i-execute-a-command-and-get-the-output-of-the-command-within-c-using-po
728x90
반응형
'프로그래밍 언어 > C++' 카테고리의 다른 글
이 프로그램이 세 개의 C ++ 컴파일러에서 잘못 거부 된 이유 (0) | 2021.07.07 |
---|---|
32 비트 루프 카운터를 64 비트로 대체하면 Intel CPU에서 _mm_popcnt_u64의 성능 편차가 발생합니다. (0) | 2021.07.06 |
new를 사용하여 C ++에서 2차원 배열을 선언하는 방법 (0) | 2021.07.06 |
__name__ == “__main__”: 하면 어떻게 될까? (0) | 2021.07.02 |
C ++에서 변수 데이터 타입을 출력 하는 법 (0) | 2021.07.01 |