Как передать вывод cat на stdin?

Как передать вывод cat на stdin?

С++ -------> 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") запускается только после того, как я нажимаю cntl+c из почтовой программы, и только после этого bash пытается интерпретировать "test msg".

решение1

system()на самом деле просто запускает командные строки. Это не что-то вроде конвейера.

Наименьшее возможное изменение, которое заставит ваш пример программы работать, будет следующим:

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

потому что тогда ваше сообщение поступает в mailстандартный ввод программы через канал.

Более практичным было бы записать сообщение во временный файл, а затем перенаправить mailstdin из этого файла.

Связанный контент