2017-07-08 97 views
0

我有这样的:从“命名管道”/FIFO读取与Node.js的

const p = path.resolve(projectRoot + '/NAMEDPIPEIN'); 
    const fd = fs.openSync(p, 'r+'); 

    fs.createReadStream(null, {fd}).on('data', function (d) { 
    if (String(d).trim() === '[stdin end]') { 
     return process.nextTick(cb); 
    } 
    process.argv.push(String(d).trim()); 
    }); 

我开始Node.js的过程,再后来,我写命名管道。由于某种原因,数据似乎没有到达数据回调。

我写命名管道,像这样:

mkfifo NAMEDPIPEIN 
echo "foo bar baz" > NAMEDPIPEIN 
+0

您是否尝试过[此建议](https://github.com/nodejs/node/issues/3628#issuecomment-152974804)for Linux? – mscdex

+0

谢谢,现在尝试它...想知道它是否会在mac上工作 –

+1

根据该线程,它(很可能)不会在除Linux以外的任何地方工作。 – mscdex

回答

1

这应做到:

const fs = require('fs'); 
const path = require('path'); 

const fifoPath = path.resolve(projectRoot, '/NAMEDPIPEIN') 

const fifo = fs.createReadStream(fifoPath); 

fifo.on('data', data => { 
    // process data... 
}); 

使用fifo.on('data', console.log)进行测试。

+0

我也建议用'fifo.setEncoding('utf8')设置文件流编码' – richardpringle