类似linux tail -n的功能如何实现

简介:

Linux tail -n的功能是如何实现的?

如果文件非常大,如何快速的取到文件的最后n行数据呢?

使用strace 命令跟踪下,发现如下的输出:

strace tail -1000 test.log  2>&1 | grep lseek
lseek(3, 0, SEEK_CUR)                   = 0
lseek(3, 0, SEEK_END)                   = 52876697
lseek(3, 52871168, SEEK_SET)            = 52871168
lseek(3, 52862976, SEEK_SET)            = 52862976
lseek(3, 52854784, SEEK_SET)            = 52854784
...
  1. 使用SEEK_END找到文件的大小(为52876697)
  2. 然后使用SEEK_SET定位到文件的最后一个page,从上面这个case看,page大小是8192,最后一个page没满8192字节,seek到52876697 - 52876697 % 8192 == 52871168这个position
  3. 读取这一个page的所有数据,统计总共出现多少个换行
  4. 如果里面的行数不到n,再往前seek一个page(52871168-8192 == 52862976),读取数据,统计行数。
  5. 循环步骤4,直到取到n行数据。
  6. 顺序读取数据,输出n行数据。
目录
相关文章
|
Java Maven
Java——如何将一个maven项目打出多个jar包
Java——如何将一个maven项目打出多个jar包
|
缓存 IDE 编译器
Git文件.gitignore和.gitkeep用法解析
Git文件.gitignore和.gitkeep用法解析
1566 0
|
3月前
|
人工智能 弹性计算 运维
2026年阿里云新用户每日秒杀优惠活动入口、配置与价格、活动规则参考
阿里云2026年面向新用户推出的每日秒杀活动,包含两大核心入口:一是"开年焕新"活动页,提供2核2G轻量服务器38元/年(宝塔面板镜像)和2核4G配置9.9元/月或199元/年(OpenClaw镜像);二是分钟级部署OpenClaw活动页,同样2核4G配置,预装Hermes或OpenClaw镜像,适合AI智能体开发。秒杀每天10:00和15:00两场,限新用户抢购,中国大陆地域可用。未抢到者可选68元/年新用户专属价,或99元/年经济型e实例、199元/年u1实例等长效特惠方案作为替代,均享新购续费同价,活动截止2027年3月31日。
|
存储 SQL NoSQL
比Hive快279倍的数据库-ClickHouse到底是怎样的
比Hive快279倍的数据库-ClickHouse到底是怎样的
915 0
比Hive快279倍的数据库-ClickHouse到底是怎样的
|
XML 前端开发 小程序
PDF转Word完全指南:3大方法满足各种场景!
还不知道PDF怎么转Word吗,本文将提供完整的PDF转Word方案,包括离线、在线或者SDK API等各种方式,总有一款满足您的需求。
1394 0
|
移动开发 负载均衡 安全
服务器存在缓慢的HTTP拒绝服务攻击
服务器存在缓慢的HTTP拒绝服务攻击
2615 0
服务器存在缓慢的HTTP拒绝服务攻击
|
7月前
|
存储 物联网 PyTorch
不用换显卡!大模型微调显存优化实操指南(附代码+效果对比)
不用换显卡!本文详解三大显存优化技巧:梯度检查点、混合精度训练、动态批量调整,附PyTorch实操代码与效果对比。16G显卡成功微调Llama 2 7B,显存占用直降38.5%,精度几乎无损,学生党、个人开发者也能轻松上手。
不用换显卡!大模型微调显存优化实操指南(附代码+效果对比)
|
前端开发 JavaScript 开发者
《解锁CSS Flex布局:重塑现代网页布局的底层逻辑》
CSS Flex布局(弹性盒子布局)是现代网页设计中的重要技术,彻底革新了传统布局方式。它通过“容器”与“项目”的概念,提供灵活的空间分配与排列规则,轻松实现水平/垂直居中、等高列、响应式布局等复杂需求。相比传统方法,Flex布局代码简洁高效,显著提升开发体验与页面适应性。然而,浏览器兼容性及对极复杂场景的支持仍需注意。作为网页布局的核心工具之一,Flex布局推动了用户体验与设计创新的进一步发展。
339 13
|
存储 算法 Java
大学生竞赛指南 ACM/ICPC
ICPC赛事由各大洲区域赛(Regional)和全球总决赛(WorldFinal)两个主要阶段组成。根据各赛区规则,每站前若干名的学校获得参加全球总决赛的资格,决赛安排在每年的4-6月举行,而区域赛一般安排在上一年的9-12月举行。一个大学可以有多支队伍参加区域预赛,但只能有一支队伍参加全球总决赛。
1129 0
|
C++ Windows
Windows 典藏篇-vc++运行库安装,Microsoft Visual C++ Build Tools官方工具
Windows 典藏篇-vc++运行库安装,Microsoft Visual C++ Build Tools官方工具
1468 0
Windows 典藏篇-vc++运行库安装,Microsoft Visual C++ Build Tools官方工具

热门文章

最新文章