본문 바로가기

개발 관련 기타/C++

[C++] system() 함수 사용 결과 / 쉘 명령 (command) 결과 (stdout) 를 문자열 (string) 로 받기

안녕하세요? 마이콜타이순 입니다. 쉘에서 특정 커맨드를 실행해서 가져오려 할 때 쉘스크립트가 아닌 C++ 을 사용해서는 어떻게 할 수 있는지 알아보았습니다.


#include <iostream>
#include <stdio.h>
#include <stdlib.h>

std::string getResultFromCommand(std::string cmd) {
	std::string result;
	FILE* stream;
	const int maxBuffer = 256; // 버퍼의 크기는 적당하게
	char buffer[maxBuffer];
	cmd.append(" 2>&1"); // 표준에러를 표준출력으로 redirect

    stream = popen(cmd.c_str(), "r"); // 주어진 command를 shell로 실행하고 파이프 연결 (fd 반환)
    	if (stream) {
    		while (fgets(buffer, maxBuffer, stream) != NULL) result.append(buffer); // fgets: fd (stream)를 길이 (maxBuffer)만큼 읽어 버퍼 (buffer)에 저장
    		pclose(stream); // 파이프 닫는 것 잊지 마시고요!
    	}
	return result;
}

// 실행 예제 ("ls -la" 의 결과값 받기)
int main (){
    std::string ls = GetStdoutFromCommand("ls -la");
    std::cout << "LS: " << ls << std::endl;
    return 0;
}