如何获取文件增量更新的内容?

2021 年 8 月 30 日
 LeeReamond

如题,现在可以监听文件描述符,文件有任何修改时候触发一个回调执行函数,但是我在用户级别要如何知道文件上次更新到什么位置了,新的更新内容又是从哪里开始的呢?

(日志文件会滚动,没法用记录行数解决)

1503 次点击
所在节点    问与答
6 条回复
delectate
2021 年 8 月 30 日
能想到的几个方案,就看权限和实现难度了:
1 、hook fs 相关 api ;
2 、设置一个“假文件”,所有写入操作都经过你“管道”处理,截留;
3 、不断地检测、复制并 diff 日志文件,如果文件很大则速度极慢;
4 、魔改 fs 源码。
Tink
2021 年 8 月 30 日
考虑变个思路? git diff ?
sujin190
2021 年 8 月 30 日
日志文件会滚动难道你的意思是设置一万行,超过就删掉一行写入一行这样?文件系统也没有这种操作的 api 吧,除非重写整个文件,那你这个日志就已经拖死整个系统了吧,一般来说滚动的意思是重命名当前文件创建一个新文件吧,那么你在监听修改的文件描述符还是原来的那个文件,并不会受重命名影响,你仍然可以用行数来判断是否重命名了文件,是否需要重新打开日志文件啊
bfdh
2021 年 8 月 30 日
tail -f ?
LeeReamond
2021 年 8 月 30 日
@bfdh 是个好办法?不过 tail -f 这东西是怎么实现的。。它自己能获取到内核的流信息?
wander639
2021 年 8 月 31 日
lseek(fd, 0, SEEK_CUR) 不太确定能不能行

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://v2ex.ih06.com/t/798732

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX