我的工作–inotyfy实现文件同步

今天终于可以工作一天了,领导让我做一个linux下文件实时同步的程序,既然要实时同步就必须要实时监控,既然要实时监控,那我也没有办法...不是说2.6内核的inotify机制可以吗,但是事情真的有那么简单吗?linux只提供机制,我的实时监控是策略,那么这就是注定这一切都要有我自己完成,inotify不提供递归操作,而且即使你监控到创建了新目录而加入监控这个新目录的话,你也不能保证在监控到目录被创建到该目录被真正加入到watch列表这一段时间间隙的文件操作是总能被监控到,确切的是就是新创建的目录里面新创建的文件有些可能监控不到,这下我可郁闷了。后来我想了一个办法,就是用补救的方式,在我加入这个新创建的目录之后再扫描一遍这个新目录的文件,提出所有的没有被监控到的但是却被扫描到的文件,可是这个工作理论虽简单,但是编程任务就复杂多了,不信你试试,很复杂的。

好在我还是相信linux的机制和策略总是结合的那么好,虽然内核不提供策略来满足我的要求并不代表用户空间找不到这样的程序,于是我在sourceforge上找了一下,找到一个pyinotify的项目,是用python实现的,完全符合我的需求,真的不错,如果内核直接满足不了我的需求,那么就在更上一个层次找找看,比如看有没有什么库可以满足需求,如果库满足不了,那么就看看有没有什么项目,一般的情况下肯定能找到的,linux就是这样的,形成了linux内核-工具库-代码库-项目这样的层次,下层为上层提供机制,而上层提供策略,开放式的开发模式决定了百分之九十的可能性可以找到现成的解决方案。

既然找到了这个解决方案,就看看inotify的历史吧,其实我是很熟悉inotify的,很早以前就了解了它并且看过它的代码,今天终于有幸看到了它的一个终极应用,这就是桌面搜索项目,用来帮用户搜索到桌面系统的文件的位置,这个项目的需求有个前提,就是个别的文件会变化,而很多文件不会变化,而为了快速搜索就需要为文件们生成一个程序便于查找的索引图,文件在磁盘存储的位置不一定适合搜索,如果为了查找文件扫描磁盘的话,那么这方法也太土了,于是为了查找快速就建立一个索引,该索引用便于查找的数据结构存储,比如B树或者avl树等等,为了实时建立索引就需要实时监控目录,于是就有了inotify,inotify之所以没有为桌面搜索提供完全的解决方案是因为内核不想提供策略,策略还是由用户空间提供,当监控到文件变化的时候,就生产一个新的索引,然后将此索引加入到索引图中,inotify就是为这个需求而生的。

原文链接: https://blog.csdn.net/dog250/article/details/5303377

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍;

也有高质量的技术群,里面有嵌入式、搜广推等BAT大佬

    我的工作--inotyfy实现文件同步

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/410330

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年4月26日 上午11:57
下一篇 2023年4月26日 上午11:57

相关推荐