我正在玩节点和fifos,并且我得到了一些奇怪的行为,我无法解释。基本上,我使用spawn创建一个fifo,为该fifo创建一个writestream,将数据传递给writestream,并生成一个从fifo读取的cat命令。如果我然后将cat命令的结果传递给stdout,它就可以工作,但如果我将它们传递给另一个文件则不起作用。请参阅以下代码
注意:此行为仅在您编写足够的数据以达到写入缓冲区
时才会出现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
})
我应该说我为什么试图这样做。我希望有一个流,它从websocket进来,用作期望文件的衍生命令的参数。所以在上面的例子中,一个流进来的流可以被送到cat,就好像cat只是在读一个文件一样。