No Rules Rules

터미널로 명령을 실행하고 결과 문자열 읽기 본문

언어/C++

터미널로 명령을 실행하고 결과 문자열 읽기

개발하는 완두콩 2023. 8. 29. 08:08
728x90
반응형

코드에서 터미널 명령을 실행하는 경우, 흔히 system 함수를 사용하게 됩니다.

하지만 system 함수의 return은 정수이며 실행 결과에 대한 문자열은 읽어올 수 없습니다.

 

따라서 명령을 수행하고 그에 따른 결과 문자열은 popen을 통해 획득할 수 있습니다.

 

 

_popen, _wpopen

Microsoft C 런타임(CRT) 라이브러리 함수 및 _wpopen에 대한 참조입니다_popen.

learn.microsoft.com

 

반응형

 

std::string CIPSettingDlg::GetResultFromCommand(std::string cmd)
{
	std::string result;
	FILE* fp(nullptr);
	const int maxBuffer = 256;
	char buffer[maxBuffer]{ 0 };
	cmd.append(" 2>&1"); // 표준 에러를 표준 출력으로 redirect

	fp = _popen(cmd.c_str(), "r");
	if (fp) {
		while (fgets(buffer, maxBuffer, fp))
			result.append(buffer);
		_pclose(fp);
	}
	return result;
}

auto result = GetResultFromCommand("ping 127.0.0.1");
728x90
반응형
Comments