C++에서 POSIX 명령 실행하기
이번 글에서는 C++ 프로그램 안에서 POSIX 셸 명령을 실행하고 그 출력을 확인하는 방법을 알아보겠습니다. 방법은 매우 간단합니다. 표준 라이브러리에서 제공하는 system() 함수를 사용하면 됩니다. 이 함수에 실행하려는 명령어가 담긴 문자열을 인자로 전달하기만 하면 됩니다.
기본 문법은 다음과 같습니다.
system("command")
system() 함수는 전달받은 문자열을 운영체제의 셸(예: bash)에 그대로 넘겨 실행합니다. 따라서 터미널에서 직접 입력할 수 있는 대부분의 명령어를 C++ 코드 안에서도 동일하게 사용할 수 있습니다.
예제 코드
#include <iostream>
using namespace std;
int main() {
cout << "echo 명령으로 문자열 출력하기" << endl;
system("echo 'Hello World'");
cout << "bc 명령으로 수식 계산하기" << endl;
system("echo '22 / 7' | bc -l");
return 0;
}
실행 결과
echo 명령으로 문자열 출력하기 Hello World bc 명령으로 수식 계산하기 3.14285714285714285714
동작 원리와 주의 사항
위 예제에서 첫 번째 system() 호출은 echo 명령을 통해 "Hello World"라는 문자열을 화면에 출력합니다. 두 번째 호출은 파이프(|)를 이용해 22 나누기 7이라는 연산식을 bc 계산기 프로그램에 전달하고, -l 옵션 덕분에 소수점 이하까지 정밀한 계산 결과를 얻을 수 있습니다.
참고로 system() 함수는 명령이 정상적으로 실행되면 0을, 실패하면 0이 아닌 값을 반환합니다. 따라서 반환값을 확인하면 간단한 오류 처리도 가능합니다.
다만 보안 측면에서 한 가지 유의할 점이 있습니다. 외부에서 들어온 입력값을 그대로 명령 문자열로 전달하면 명령 삽입(command injection) 공격에 취약해질 수 있습니다. 실무 환경에서는 반드시 입력값을 검증하거나, 상황에 따라 popen(), exec 계열 함수처럼 더 세밀한 제어가 가능한 안전한 대안을 함께 고려하는 것이 좋습니다.