Boost logo

Boost :

Subject: Re: [boost] [gsoc] Boost.Process done
From: Ilya Sokolov (ilyasokol_at_[hidden])
Date: 2010-08-31 09:47:38


On 20.08.2010 0:40, Boris Schaeling wrote:
> On Thu, 19 Aug 2010 22:34:36 +0200, Ilya Sokolov <ilyasokol_at_[hidden]>
> wrote:
>
>> Boris Schaeling wrote (in the attached file):
>> > File descriptors must be closed after context is instantiated as the
>> > context constructor uses the behavior inherit which tries to dup()
>> > stdin, stdout and stderr.
>>
>> Which makes me nervous (sorry) as it is superfluous in 90% of cases.
>
> Currently the standard constructor of the context class reproduces
> standard behavior on POSIX systems (file descriptors are inherited). Do
> you think this should be changed?

No, but read below.

> Or it would be fine to provide another
> constructor which expects up to three parameters to configure stdin,
> stdout and stderr?

I don't think it is good to create files in the constructors of classes
derived from stream_behavior. Consider the following program (untested):

bp::context ctx;
ctx.stdout_behaviour = bp::behavior::pipe::create(
     bp::behavior::pipe::output_stream);

// 1
bp::child foo =
   bp::create_child("foo", std::vector<std::string>(), ctx);

// 2
bp::child bar =
   bp::create_child("bar", std::vector<std::string>(), ctx);

AFAIU, the line 2 will throw exception "dup2() failed" on POSIX, and
spawn child process with closed(!) stdout on Windows.


Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk