
C++ ------> g++ -------> bash :
#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
從該文件重定向標準輸入