현재 아주 간단한 프로그램을 제작중에 문뜩 의문이 생겨 포스팅 해 본다.
Windows 에서는 system() , WinExec() 함수를 통해,
리눅스에서는 system() 함수를 통해 보통 명령어를 실행한다.
하지만 문제는 명령어를 실행 했을 때, 커맨드 상에 출력되는 값을 받아오고 싶을때는 어떻게 해야 할 지 난감하다.
이에 대한 대안 코드가 StackOverFlow 에 기재되어 있다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
#include <iostream>
#include <stdexcept>
#include <stdio.h>
#include <string>
#include <iostream>
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;
}
int main()
{
auto a = exec("ipconfig");
std::cout << a << std::endl;
}
|
cs |
함수구성은 특별히 어렵지 않다.
매우 간단하고 효과적인 방법으로 출력값을 도출한다.
'Programming > C++' 카테고리의 다른 글
[C++] constexpr 사용하기. (0) | 2020.11.22 |
---|---|
[C++] 함수 포인터 (0) | 2020.11.01 |
[C++] C++ 이 끔찍한 언어라 욕을 먹는 이유. (0) | 2020.09.30 |
어떻게 특정 .h 가 dll, lib 와 매칭되는지 알 수 있나? (0) | 2020.07.14 |
[C++] 템플릿 특수화에 관해서 (0) | 2020.07.03 |