C++ ------> g++ -------> リリース:
#include <cstdlib>
using namespace std;
int main(){
system("mail -s test_mail [email protected]");
system("test msg");
system(".");
return 0;
}
最初のシステムコマンドはうまく実行されますが、標準入力ではなく他の入力ストリームから入力を受け取るかのように機能します。 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
ファイルから標準入力をリダイレクトすることです。