啦啦啦~~~
分类: LINUX
2013-03-06 23:13:36
============================================================================================================================================================
Linux系统中提供了一套intotify的机制来监视文件系统的事件,比如创建文件,打开,关闭等等。利用这一机制,我们可以很容易写出监控目录变化的工具。更何况更有了一个inotify_tools的开源工程呢。inotify_tools对inotify的API做了进一步的封装,更加方便使用。
下面的例子来源于inotify_tools的示例代码,但是做了一些改进。inotify_tools监视一个目录时,可以得到该目录变化的信息。但是在该目录下,创建一个子目录后,子目录中的变化,inotify_tools不能获取。所以我添加了动态监控目录的代码。
代码很简单。就是在获得事件以后,检查是否为目录。如果是目录,则需要进行动态监控的检查。如果是创建动作,那么就添加新的监控。如果是删除动作,就去掉已有的监控wd。
Bean_lee2013-03-08 08:56:05
gfree_wind:这个有其它方法可以解决。但是我不方便告诉你,涉及一定的企业秘密。
你可以上网查查,我觉得应该可以查到。
好的,兄弟。 我理解
回复 | 举报gfree_wind2013-03-07 21:18:28
Bean_lee:如果能发现时哪个进程让它变化就好了。
这个有其它方法可以解决。但是我不方便告诉你,涉及一定的企业秘密。
你可以上网查查,我觉得应该可以查到。
gfree_wind2013-03-07 13:58:59
Bean_lee:我没有细细的读这份code,我比较好奇,加入某个进程往file A里面写东西,但是这个进程不是daemon,他瞬间就消失了,这个inotify_tool能监控的到是哪个进程往file里面写东西了吗?
因为这个场景是我在项目中遇到的一个问题。
inotify只能监控,谁变化了。而不能发现,谁让它变化的。
回复 | 举报gfree_wind2013-03-07 13:01:01
Bean_lee:我没有细细的读这份code,我比较好奇,加入某个进程往file A里面写东西,但是这个进程不是daemon,他瞬间就消失了,这个inotify_tool能监控的到是哪个进程往file里面写东西了吗?
因为这个场景是我在项目中遇到的一个问题。
inotifytools_next_event的参数-1,是timeout参数。
timeout maximum amount of time, in seconds, to wait for an event. If timeout is 0, the function is non-blocking. If timeout is negative, the function will block until an event occurs.
所以这个进程不会退出。