
С++ -------> 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
стандартный ввод программы через канал.
Более практичным было бы записать сообщение во временный файл, а затем перенаправить mail
stdin из этого файла.