用inotify监视文件/目录变化
转载时请注明出处和作者联系方式:http://blog.csdn.net/absurd
作者联系方式:李先静 <xianjimli at hotmail dot com>
更新时间:2007-6-18
介绍inotify使用方法的文章已经有很多了,写得也非常清楚,本来不需要我多此一举了。不过,我是第一次使用,而且用得不是很顺,作为新手,想法毕竟有些不同,所以有些东西还是值得记录下来的。
最近为桌面增加监控applictions目录变化的功能,我们的桌面虽然是自己开发的,但遵循了freedesktop的Desktop Entry Specification标准。应用程序的desktop文件放置在applictions目录下,这是应用程序的入口,桌面负责把它们放在适当的位置(如开始菜单和状态栏中)。对于内置的应用程序,它们的desktop文件不会变化,但是第三方的应用程序可能随时安装/卸载,如果安装/卸载要强迫用户重起机器,那太不人性化了。为了支持动态安装和卸载,我们通过监控applictions中desktop文件的变化来实现。
1. glibc版本偏旧,没有提供inotify的头文件。
较旧的glibc(如2.4之前的)没有提供inotify的头文件,不能直接使用网上介绍的方法,要自己定义系统调用和那些常量,如:
#include <sys/syscall.h> #ifndef __NR_inotify_init #if defined(__i386__) # define __NR_inotify_init 291 # define __NR_inotify_add_watch 292 # define __NR_inotify_rm_watch 293 #elif defined(__x86_64__) ...
{ return syscall(__NR_inotify_init); }
static inline int inotify_add_watch(int fd, const char *name, uint32_t mask) { return syscall(__NR_inotify_add_watch, fd, name, mask); }
static inline int inotify_rm_watch(int fd, uint32_t wd) { return syscall(__NR_inotify_rm_watch, fd, wd); }
struct inotify_event { |