gpt4 book ai didi

c++ - 执行 popen(),将 FILE* 指针放入 fstream,那么 pclose() 呢?

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:24:33 35 4
gpt4 key购买 nike

所以...我启动了另一个进程,它从我的程序中接受一些输入(它也可以反过来)。诸如此类:

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 捕获关闭并确保它以我希望它关闭的方式关闭。

最佳答案

我将从 ofstream 继承自定义类:

class PipeStream : public std::ofstream

并覆盖析构函数

PipeStream::~PipeStream { pclose(f) };

所以 pclose(f) 在 fclose(f) 之前运行?

关于c++ - 执行 popen(),将 FILE* 指针放入 fstream,那么 pclose() 呢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21276209/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com