情况: 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)
Run Code Online (Sandbox Code Playgroud)
readStream 轮询:这很简单,读取流在到达文件末尾 (EOF) 时始终关闭,并且会触发“结束”事件。因此,如果您读取了所有文件,则无法将打开的 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)
Run Code Online (Sandbox Code Playgroud)
通过 tail 读取流(tail 命令将为您轮询)
const { spawn } = require('child_process');
const child = spawn('tail', ['-f', 'openedFile.txt']);
child.stdout.pipe(process.stdout)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2174 次 |
| 最近记录: |