
C++ -------> g++ -------> bash:
#include <cstdlib>
using namespace std;
int main(){
system("mail -s test_mail [email protected]");
system("test msg");
system(".");
return 0;
}
Der erste Systembefehl läuft einwandfrei, aber dann ist es so, als würde er Eingaben aus einem anderen Eingabestream (nicht stdin) entgegennehmen. system("test msg") wird nur ausgeführt, nachdem ich mit Strg+C das Mailprogramm verlasse, erst dann versucht Bash, "test msg" zu interpretieren.
Antwort1
system()
führt wirklich nur Befehlszeilen aus. Es ist kein Pipe-ähnliches Ding.
Die kleinstmögliche Änderung, damit Ihr Beispielprogramm funktioniert, wäre
int main()
{
system("echo test msg | mail -s test_mail [email protected]");
return 0;
}
mail
weil Ihre Nachricht dann über eine Pipe in die Standardeingabe des Programms gelangt .
Praktischer wäre es, wenn Sie Ihre Nachricht in eine temporäre Datei schreiben und dann mail
stdin von dieser Datei umleiten.