所以...我开始另一个进程,它接受来自我的程序的一些输入(它也可以反过来)。类似的东西:
FILE *f(popen("sendmail", "w"));
现在,我可以将 f 放入 fstream 中,这样我就可以使用流(因为我的程序是 C++ 中的,这似乎是一件明智的事情。)
std::ofstream output(fileno(f));
...
output << "To: santa.claus@example.com" << std::endl;
...
到这里为止,我很好。现在是我完成向子进程发送数据的时候了。我想要的只是关闭管道。据我所知,我们应该使用 pclose() 因为该函数确保其他进程接收所有数据。换句话说,pclose() 函数知道如何干净利落地关闭管道。
不幸的是,因为我把 f 放在了一个 ofstream 中,我不能直接关闭它,可以吗?
pclose(f); // proper way to close a pipe
...
ofstream::~ofstream() { ... close(fd); ... } // not the right way to close a pipe
有没有办法从 ofstream 捕获关闭并确保它以我希望它关闭的方式关闭。