Nicolas Williams wrote:
> On Wed, Sep 02, 2009 at 04:22:41PM -0700, Bill Sommerfeld wrote:
>> On Wed, 2009-09-02 at 19:12 -0400, James Carlson wrote:
>>> I think that's slightly inferior: it requires an extra fd for no reason
>>> at all and thus adds an unnecessary failure mode.  I like the close(0),
>>> open, dup2(0,1), dup2(0,2) model better.  And closing 1 and 2 first is
>>> even better for (implausible) security reasons.
>> on the other hand, the {close(0); open(), dup2, dup2 } sequence is only
>> guaranteed to work as desired in a single-threaded process with no
>> signal handlers able to run.  otherwise, a different thread or signal
>> handler could get in sideways between the close() and the open() and nab
>> fd 0.
> 
> Oh, good point.  I'd discounted threads here because we're doing fork()
> (which is not forkall() nowadays).  But there's signals.

Yep; good point.  I'd still want to do the closes first (to avoid the
unnecessary extra failure mode when all fds are in use, as much as is
possible).

-- 
James Carlson         42.703N 71.076W         <carlsonj at workingcode.com>

Reply via email to