有没有办法确切地知道Linux上的哪个部分文件被更改了

时间:2016-04-09 18:31:50

标签: c linux-kernel synchronization watch inotify

我想构建文件同步软件。有没有办法让内核系统(如I-notify或其他人)获得确切的文件更改(或至少更改大小)?

修改 我对I-notify的以下场景感兴趣: 当我在文件上获取IN_MODIFY事件时,我希望以某种方式检索文件的更改行(某种文件diff格式)。是否有任何Linux内核工具来实现这一目标?

2 个答案:

答案 0 :(得分:1)

即使有这样的内核功能,它也无法在实践中发挥作用。你看,大多数编辑通过创建副本来修改文件,然后通过原始副本重命名。这样,用户可以确保获得旧内容或新内容,而不是两者之间的混合。

唯一真正的选择是获取文件的快照(例如,当文件打开以供写入时关闭,或者当文件被替换为新文件时),并比较快照,以找出哪个部分是改变。

比较文件的两个版本以查看它的哪个部分被更改本身就是一个难题,因为它肯定取决于文件格式。对于源代码,unified diffs运行良好,但对于其他类型(包括非面向行的纯文本文件),它并不那么简单。

答案 1 :(得分:-1)

你能否提出你的问题? Linux上的inotify API会监视此类更改,以及类似的更改,例如文件是否已打开,目录(或目录本身)中的文件是否已移动以及文件删除等。

有关详情,请参阅此处: (http://man7.org/linux/man-pages/man7/inotify.7.html

<强> 编辑: 我相信我第一次误读了这个问题,如果我这样做,是的,这样的程序是存在的,而inotify API是Linux内核中存在的主要API。有关其提供的不同功能的综合指南,请参阅上面的链接。