情况:1。一个应用程序(不是node.js)将数据写入某个文件,大小未知2. Node.js应该管道该文件的内容,直到它被第一个应用程序打开写入。
可能吗?
你有一些解决方案。
writeStream.js是一个简单的测试类,可以作为demo在文件中写入
const fs = require('fs')
const fd = fs.openSync('./openedFile.txt', 'w+')
const stream = fs.createWriteStream(null, {
fd,
encoding: 'utf8'
})
process.stdin.pipe(stream)
readStream轮询:这很简单,读取流在到达文件末尾(EOF)时会一直关闭并触发'end'事件。因此,如果您全部阅读,则无法将文件打开fd。 (在这个例子中,我不管理流是否仍然打开,因为它无法读取所有文件)
const fs = require('fs')
let streamed = 0
function readFd() {
const fd = fs.openSync('./openedFile.txt', 'r')
const stream = fs.createReadStream(null, {
fd,
encoding: 'utf8',
start: streamed
})
stream.on('data', function (chunk) {
streamed += chunk.length;
})
stream.pipe(process.stdout)
}
setInterval(readFd, 1000)
readStream via tail(tail命令会为你调查)
const { spawn } = require('child_process');
const child = spawn('tail', ['-f', 'openedFile.txt']);
child.stdout.pipe(process.stdout)