所以...我开始另一个接受我程序输入的进程(它也可以反过来)。类似的东西:
FILE *f(popen("sendmail", "w"));
现在,我可以将f放入fstream中,这样我就可以使用流(因为我的程序是在C ++中,这似乎是一件明智的事情。)
std::ofstream output(fileno(f));
...
output << "To: santa.claus@example.com" << std::endl;
...
到此为止,我很好。现在,我已经完成了向子进程发送数据的问题。我只想关闭管道。据我所知,我们应该使用pclose(),因为该函数确保其他进程接收所有数据。换句话说,pclose()函数知道如何干净地严重管道。
不幸的是,因为我把f放在一个流中,我不能只关闭它,可以吗?
pclose(f); // proper way to close a pipe
...
ofstream::~ofstream() { ... close(fd); ... } // not the right way to close a pipe
有没有办法捕捉来自ofstream的关闭并确保它以我希望它关闭的方式关闭。
答案 0 :(得分:1)
我会从ofstream继承自定义类:
class PipeStream : public std::ofstream
并覆盖析构函数
PipeStream::~PipeStream { pclose(f) };
这样pclose(f)在fclose(f)之前运行?