iNotify机制

iNotify 是Linux 2.6 内核中的文件系统变化通知机制,Android 1.6版本便已基于Linux 2.6.29内核,自带集成了这个强大的功能。

  • 既可以监视文件,也可以监视目录
  • 不需要对被监视的目标打开文件描述符,资源占用少
  • 可以监视的文件系统事件包括:

Event

描述

IN_ACCESS

即文件被访问

IN_MODIFY

文件被 write

IN_ATTRIB

文件属性被修改chmod、chown、touch 等

IN_CLOSE_WRITE

可写文件被 close

IN_CLOSE_NOWRITE

不可写文件被 close

IN_OPEN

文件被 open

IN_MOVED_FROM

文件被移走,如 mv

IN_MOVED_TO

文件被移来,如 mv、cp

IN_CREATE

创建新文件

IN_DELETE

文件被删除,如 rm

IN_DELETE_SELF

自删除,即一个可执行文件在执行时删除自己

IN_MOVE_SELF

自移动,即一个可执行文件在执行时移动自己

IN_UNMOUNT

宿主文件系统被 umount

IN_CLOSE

文件被关闭,等同于(IN_CLOSE_WRITE 、IN_CLOSE_NOWRITE)

IN_MOVE

文件被移动,等同于(IN_MOVED_FROM 、IN_MOVED_TO)

2、怎么把iNotify用起来?

2.1. 使用 inotify 的第一步是创建 inotify 实例

int fd = inotify_init ();

  • 返回inotify实例的文件描述符

2.2.添加一个watch

int wd = inotify_add_watch (fd, path, mask);

  • fd就是inotify实例描述符
  • path为监听目录或文件
  • mask是事件的掩码
  • wd是watch对象的描述符

2.3. 获取文件事件

事件用一个 inotify_event 结构表示

struct inotify_event {
        __s32           wd;             /* watch descriptor */
        __u32           mask;           /* watch mask */
        __u32           cookie;         /* cookie to synchronize two events */
        __u32           len;            /* length (including nulls) of name */
        char            name[0];        /* stub for possible name */
};

read读取事件

size_t len = read (fd, buf, BUF_LEN);

  • buf 是一个 inotify_event 结构的数组指针
  • BUF_LEN 指定要读取的总长度,buf 大小至少要不小于 BUF_LEN
  • len 为实际读取的字节数,即获得的事件的总长度。对buf解析即可用得到inotify_event事件

2.4 移除watch

int ret = inotify_rm_watch (fd, wd);

  • fd 是 inotify_init() 返回的文件描述符,
  • wd 是 inotify_add_watch() 返回的 watch 描述符

 

beagle 是 GNOME 的桌面搜索引擎项目,inotify 的引入就是完全受它的驱动而做的。对于桌面搜索引擎,它一般作为一个优先级很低的后台进程运行, 只有在系统没有其他任务可运行时才被调度执行,桌面搜索引擎的主要用途就是为系统的文件系统的文件建立索引数据库,以便用户在需要某文件但又想不起存放在哪里时能够根据某些关键字或特征快速地搜索到需要的文件,就象使用网络搜索引擎 google 一样便捷。文件系统有个特点就是只有某些文件会变化,因此桌面搜索引擎在第一次建立完索引数据库后,没必要重复遍历所有的文件建立新的索引,它只需要更新修改了的文件的索引,建立新增加的文件的索引,删除已经删除的文件的索引就足够了,这样桌面搜索引擎需要做的工作就大大地减少。Inotify 就是为这一意图专门设计的,beagle 为需要监视的目录或文件创建了inotify 实例,然后它就等待该 inotify 上发生文件系统事件,如果没有任何文件变化,beagle 将不需要任何开销,只有在有被监视的事件发生时,beagle 才被唤醒并根据实际事件来更新对应的文件的索引,然后继续睡眠等待下一个文件系统事件发生。在 SuSe 9.3 和即将发布的 10.0 中就包含了该桌面搜索引擎,它能够为文档、email、音乐、图象和应用等建立索引。使用过 windows 下的桌面搜索引擎的读者对 google 和 yahoo 以及 Microsoft 的桌面搜索引擎有深刻的体会,感兴趣读者可以安装 SuSe 使用一下。

http://www.ibm.com/developerworks/cn/linux/l-inotifynew/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值