Boost.Process 0.5 ( http://www.highscore.de/boost/process0.5/index.html ) のこの簡単な例では、プログラムの出力 ( ls
) がストリームに供給されています。ストリームは正常に動作しますが、期待に反して、プログラムの終了後にストリームが無効になりません (ストリームの終わりなど) (Boost.Process の以前のバージョンと同様に、http: //www.highscore.de/boost など)。 /プロセス/index.html )
is
子プログラムの終了後にストリーム (例では) を自動的に無効にするために何が欠けていますか?
おそらく、の Boost.Streams に設定する必要があるオプションstream
ですかfile_descriptor
?
#include <boost/process.hpp> // version 0.5 from http://www.highscore.de/boost/process0.5/process.zip
#include <boost/iostreams/device/file_descriptor.hpp>
#include <boost/iostreams/stream.hpp>
#include <string>
using namespace boost::process;
using namespace boost::process::initializers;
using namespace boost::iostreams;
int main(){
boost::process::pipe p = create_pipe();
file_descriptor_sink sink(p.sink, close_handle);
child c = execute(run_exe("/usr/bin/ls"), bind_stdout(sink));
file_descriptor_source source(p.source, close_handle);
stream<file_descriptor_source> is(source);
std::string s;
while(std::getline(is, s)){
std::cout << "read: " << s << std::endl;
}
std::clog << "end" << std::endl; // never reach
}