2017-07-08 95 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