cat 출력을 stdin으로 파이프하는 방법은 무엇입니까?

cat 출력을 stdin으로 파이프하는 방법은 무엇입니까?

C++ -------> g++ -------> bash:

#include <cstdlib>

using namespace std;

int main(){

    system("mail -s test_mail [email protected]");
    system("test msg");
    system(".");

    return 0;
 }

첫 번째 시스템 명령은 잘 실행되지만 다른 입력 스트림(stdin이 아님)에서 입력을 받는 것과 같습니다. system("test msg")는 메일 프로그램에서 i cntl+c를 실행한 후에만 실행되며, 그런 다음 bash는 "test msg"를 해석하려고 시도합니다.

답변1

system()실제로는 명령줄을 실행합니다. 파이프 같은 것이 아닙니다.

예제 프로그램이 작동하도록 하기 위해 가능한 가장 작은 변경은 다음과 같습니다.

int main()
{
    system("echo test msg | mail -s test_mail [email protected]");
    return 0;
}

mail왜냐하면 메시지가 파이프를 통해 프로그램 표준 입력 으로 들어가기 때문입니다 .

더 실용적인 방법은 메시지를 임시 파일에 쓴 다음 mail해당 파일에서 표준 입력을 리디렉션하는 것입니다.

관련 정보