当前位置: 首页 > Linux

nodejs实现tail-f函数

时间:2023-04-06 05:58:38 Linux

'使用严格';constfs=require('fs');/***tailf**@param{String}filenamefilename*@param{Number}delay无法读取内容时的等待时间,ms*@param{Function}onError的操作失败时的回调函数,onError(err)*@param{Function}onData读取文件内容时的回调函数,onData(data)*/functiontailf(filename,delay,onError,onData){//读取文件内容每次文件块大小,16KconstCHUNK_SIZE=16*1024;//打开文件并获取文件句柄fs.open(filename,'r',(err,fd)=>{if(err)returnonError(err);//文件起始位置fs.fstat(fd,(err,stats)=>{if(err)returnonError(err);//文件起始位置letposition=stats.size;//循环读取取constloop=()=>{constbuf=Buffer.alloc(CHUNK_SIZE);fs.read(fd,buf,0,CHUNK_SIZE,position,(err,bytesRead,buf)=>{if(err)returnonError(err);//实际读取的内容长度是根据bytesRead//和更新位置position+=bytesRead;onData(buf.slice(0,bytesRead));if(bytesRead{if(event==='change'){loop();}});});});}constfilename=process.argv[2];if(filename){tailf(filename,100,err=>{if(err)console.error(err);},data=>{process.stdout.write(data);});}else{console.log('Howtouse:nodetailf');}