【发布时间】:2015-11-14 22:36:40
【问题描述】:
我想将数据从我的 C++ 程序中发送到外部管道,如下所示:
FILE* file = popen("my_prog -opt | other_prog", "w");
std::ostream fileStream = some_function(file);
fileStream << "some data";
我知道没有简单的跨平台方法来做第二行,但是除了popen 之外,还有什么方法可以完成同样的事情吗?我不需要使用popen,但我确实需要使用ostream。它至少需要使用clang 和gcc 进行编译,但最好可以使用任何编译器。我也可以更改处理管道的方式,但我没有 my_prog 或 other_prog 的来源。
【问题讨论】:
-
试试看
boost::iostreams::file_descriptor。它有非常糟糕的文档,但它可以帮助你,而且它是跨平台的。 -
您有什么具体原因需要使用
ostream -
您能否在创建流程之前将所有输入输入
fileStream,然后将其作为输入提供给my_prog,或者在创建流程之后才知道某些输入?跨度> -
@James_Parsons 我的代码库中有很多其他代码可以与
ostreams 一起使用。 -
您是否考虑过创建自己的实现
std::ostream的类?我不确定复杂性,但我猜想,简单的不太优化的版本可以在一天内完成。我确信你不应该只在代码中写popen:在构造函数中使用带有popen的RAII 类,在析构函数中使用pclose。
标签: c++ popen ostream filehandle