Node.js tail-f-n1返回所有内容,而不是更改
第一部分: 我在linux ubuntu中有一个text.txt文件 我想用尾巴观看文件,以便抓取文件的最后内容Node.js tail-f-n1返回所有内容,而不是更改,node.js,linux,tail,spawn,Node.js,Linux,Tail,Spawn,第一部分: 我在linux ubuntu中有一个text.txt文件 我想用尾巴观看文件,以便抓取文件的最后内容 # command linux tail -f text.txt 此命令返回所有内容 所以我把它改成: # command linux tail -f -n 1 text.txt 但同样的结果再次出现 我使用以下命令检查文件行: # command linux wc -l text.txt 将内容追加到文件后,行号计数将发生更改 那么首先是什么问题 第二,问题是关于node
# command linux
tail -f text.txt
此命令返回所有内容
所以我把它改成:
# command linux
tail -f -n 1 text.txt
但同样的结果再次出现
我使用以下命令检查文件行:
# command linux
wc -l text.txt
将内容追加到文件后,行号计数将发生更改
那么首先是什么问题
第二,问题是关于nodejs的
nodejs:
我想运行child_进程(spawn):
有没有更好的办法来观看文件内容?私下里,这个文件越来越大。使用spawn处理如此繁重的负载是否明智?您可以使用文件描述符进行更改:
const fs=require('fs'))
const len=26//要读取多少字节
const offset=0//从文件开头开始
const pos=null//此参数起作用:文件描述符更新为最后读取的字节
fs.open('text.txt','r',(err,fd)=>{
如果(错误){
console.log(错误)
进程。退出(1)
}
//fd是一个文件描述符
常数kill=setInterval(持续加载,1000)
函数keepReading(){
fs.read(fd,Buffer.alloc(len),offset,len,pos,(err,bytes,buff)=>{
如果(错误){
console.log(错误)
进程。退出(1)
}
如果(字节!==0){
console.log(buff.toString())
}
})
}
process.once('SIGINT',()=>{
清除间隔(杀死)
})
})
该解决方案的优点是跨平台
使用spawn处理如此重的负载是否明智
繁殖它比读取文件描述符慢
注:在节点13中,有更友好的界面tnx用于回复。是否仍要更改文件行的len字节?您可以将其设置为
16384
(16kb),然后将数据推入writer并从文件中读取。读取文件时,文件大小不应导致显著的性能开销。它足够聪明,可以从末尾向后读取块,计算行数,然后向前打印。即使它返回几个块,它们仍将在缓存中。(BusyBox可能有劣质版本。)
let tailing_my_file = spawn("tail -f ./text.txt") // in root directory of project