node.js进程的额外stdio流

时间:2014-01-20 21:38:55

标签: node.js node.js-stream

node.js API文档在生成子进程时使用额外的stdio(fd = 4):

// Open an extra fd=4, to interact with programs present a
// startd-style interface.
spawn('prg', [], { stdio: ['pipe', null, null, null, 'pipe'] });

通过ChildProcess.stdio[fd],父进程可以使用该stdio。

子进程如何访问这些额外的stdios?让我们在文件描述符3(fd = 3)上使用流而不是管道。

/* parent process */

// open file for read/write
var mStream = fs.openSync('./shared-stream', 'r+');

// spawn child process with stream object as fd=3
spawn('node', ['/path/to/child.js'], {stdio: [0, 1, 2, mStream] });

1 个答案:

答案 0 :(得分:8)

虽然node.js没有在API中记录这一点,但您可以使用fs.readfs.write使用文件描述符的索引号读取/写入这些流。

我没有找到任何检查process对象的信息,这个对象表明这些stdios可用于子进程,所以据我所知,你将无法检测到这些stdios是否存在可以从孩子那里获得。

但是,如果您确定您的子进程将使用这些stdios生成,那么您可以使用这样的读/写函数:

var fd_index = 3;
fs.write(fd_index, new Buffer(data, 'utf8'), 0, data.length, null, function(err, bytesWritten, buffer) {
   if(err) return failure();
   else ...
   // success
});