On Monday, October 28, 2013 9:50:08 AM UTC+11, NiftyHat Tom Mitchell wrote:
>
> I think you want to look at dup() and dup2.  I see some mumble foo that
> this was added to node.js back in 2010 (first patch offered that I saw).
>
> My expectation is you would use it the same as in "C".  This link may be 
> of value:
>      
> http://stackoverflow.com/questions/11635219/dup2-dup-why-would-i-need-to-duplicate-a-file-descriptor
>
> The notation "2>&1" instructs the shell to do the dup sequence of system 
> calls
> to make sure the standard file descriptors stdin, stdout, stderr and their 
> descriptor
> numbers all match expectations.   The fork() exec() file descriptor tangle 
> is well documented
> in older Unix documents.   Many modern systems assume programmers know all
> this old stuff and leave it as an exercise for the student.     There is 
> open source
> simple shell like code that gets it correct... 
>
> Anytime you have multiple writers to the same file there is a risk of 
> confused output.
> Often things are fine up to the point that system load changes and true 
> concurrency
> or time slice conflict happens.  Writes to stdout, stderr are not 
> interlocked on many
> systems.
>
> The order can prove important:
> i.e. difference between ">/dev/null 2>&1" and "2>&1 >/dev/null"
>
> http://stackoverflow.com/questions/916900/having-trouble-with-fork-pipe-dup2-and-exec-in-c
>
>
Thanks. dup sounds precisely like what I want (and that explains why the 
output got garbled when I tried to simply use the same FD twice).

Sadly, I can't find any bindings for `dup` in nodejs. Most of the 
discussions that turn up in google seem to be a patch, followed by "you 
don't need that". Grepping the nodejs source itself for `dup` reveals only 
C code using it, no JS bindings :(
 

> On Saturday, October 26, 2013 6:19:50 PM UTC-7, Tim Cuthbertson wrote:
>
>> I want to spawn a child process and have *all* output go to the same file.
>>
>> I tried this:
>>
>>     var fs = require('fs'), childProcess = require('child_process');
>>     var output = fs.openSync('/tmp/output.log', 'w');
>>     childProcess.spawn('bash', ['-c', 'echo STOUT; echo STDERR >&2; echo 
>> DONE;'], {stdio: ['ignore', output, output]});
>>
>  
>
>> ...snip ......
>>
>
> Is there anything similar in nodejs, or am I stuck with explicitly 
>> truncating the file, followed by opening two append-mode descriptors?
>>
>> Cheers,
>>  - Tim.
>>
>

-- 
-- 
Job Board: http://jobs.nodejs.org/
Posting guidelines: 
https://github.com/joyent/node/wiki/Mailing-List-Posting-Guidelines
You received this message because you are subscribed to the Google
Groups "nodejs" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/nodejs?hl=en?hl=en

--- 
You received this message because you are subscribed to the Google Groups 
"nodejs" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/groups/opt_out.

Reply via email to