我想构建文件同步软件。有没有办法让内核系统(如I-notify或其他人)获得确切的文件更改(或至少更改大小)?
修改 我对I-notify的以下场景感兴趣: 当我在文件上获取IN_MODIFY事件时,我希望以某种方式检索文件的更改行(某种文件diff格式)。是否有任何Linux内核工具来实现这一目标?
答案 0 :(得分:1)
即使有这样的内核功能,它也无法在实践中发挥作用。你看,大多数编辑通过创建副本来修改文件,然后通过原始副本重命名。这样,用户可以确保获得旧内容或新内容,而不是两者之间的混合。
唯一真正的选择是获取文件的快照(例如,当文件打开以供写入时关闭,或者当文件被替换为新文件时),并比较快照,以找出哪个部分是改变。
比较文件的两个版本以查看它的哪个部分被更改本身就是一个难题,因为它肯定取决于文件格式。对于源代码,unified diffs运行良好,但对于其他类型(包括非面向行的纯文本文件),它并不那么简单。
答案 1 :(得分:-1)
你能否提出你的问题? Linux上的inotify API会监视此类更改,以及类似的更改,例如文件是否已打开,目录(或目录本身)中的文件是否已移动以及文件删除等。
有关详情,请参阅此处: (http://man7.org/linux/man-pages/man7/inotify.7.html)
<强> 编辑: 强> 我相信我第一次误读了这个问题,如果我这样做,是的,这样的程序是存在的,而inotify API是Linux内核中存在的主要API。有关其提供的不同功能的综合指南,请参阅上面的链接。