V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
LeeReamond
V2EX  ›  问与答

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

  •  
  •   LeeReamond · 90 天前 · 664 次点击
    这是一个创建于 90 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

    6 条回复    2021-08-31 10:52:10 +08:00
    delectate
        1
    delectate   90 天前
    能想到的几个方案,就看权限和实现难度了:
    1 、hook fs 相关 api ;
    2 、设置一个“假文件”,所有写入操作都经过你“管道”处理,截留;
    3 、不断地检测、复制并 diff 日志文件,如果文件很大则速度极慢;
    4 、魔改 fs 源码。
    Tink
        2
    Tink   90 天前 via Android
    考虑变个思路? git diff ?
    sujin190
        3
    sujin190   90 天前
    日志文件会滚动难道你的意思是设置一万行,超过就删掉一行写入一行这样?文件系统也没有这种操作的 api 吧,除非重写整个文件,那你这个日志就已经拖死整个系统了吧,一般来说滚动的意思是重命名当前文件创建一个新文件吧,那么你在监听修改的文件描述符还是原来的那个文件,并不会受重命名影响,你仍然可以用行数来判断是否重命名了文件,是否需要重新打开日志文件啊
    bfdh
        4
    bfdh   90 天前
    tail -f ?
    LeeReamond
        5
    LeeReamond   90 天前
    @bfdh 是个好办法?不过 tail -f 这东西是怎么实现的。。它自己能获取到内核的流信息?
    wander639
        6
    wander639   89 天前
    lseek(fd, 0, SEEK_CUR) 不太确定能不能行
    关于   ·   帮助文档   ·   API   ·   FAQ   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   2353 人在线   最高记录 5497   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 14:55 · PVG 22:55 · LAX 06:55 · JFK 09:55
    ♥ Do have faith in what you're doing.