当pipe道到标准输出时,nodejs fifo工作,但当pipe道到文件时不工作

我正在玩节点和fifos,正在得到一些我无法解释的怪异行为。 基本上,我使用spawn创build一个fifo,创build一个写入到该FIFO的stream,将数据传输到写入stream,并产生一个从fifo读取的cat命令。 如果我然后将cat命令的结果传递给标准输出,但是如果将它们传输到另一个文件则不起作用。 请参阅下面的代码

注意:这种行为只有在写入足够的数据来写入缓冲区时才会出现

var fs = require('fs'), stream = require('stream'); // create read stream var rs = fs.createReadStream('testinput') var spawn = require('child_process').spawn; // create fifo var fifo = spawn('mkfifo', ['testfifo']); fifo.on('exit', function() { // when fifo is created, proceed // create outfile and attach fifostream var ws = fs.createWriteStream('testoutput') var fifows = fs.createWriteStream('testfifo'); // pipe to fifo rs.pipe(fifows); // spawn process to read fifo var prog = spawn('cat', ['testfifo']); // send results somewhere prog.stdout.pipe(process.stdout); // this works // prog.stdout.pipe(ws); // this doesn't }) 

我应该说我为什么要这样做。 我想有一个stream,从websocket进来的stream被用作一个产生的命令,期待一个文件的参数。 所以在上面的例子中,一个进来的stream可以被喂给猫,并像猫刚读取文件一样行为。