文章目录
一、Linux inotify
1. 什么是 inotify
inotify是一种强大的、细粒度的、异步的文件系统监控机制,linux内核从2.6.13起,加入了Inotify支持,通过Inotify可以监控文件系统中添加、删除、修改、移动等各种事件,利用这个内核接口,第三方软件就可以监控文件系统下文件的各种变化情况。
inotify既可以监控文件,也可以监控目录。当监控目录时,它可以同时监控目录及目录中的各子目录及文件的。
开源社区提出用户态需要内核提供一些机制,以便用户态能够及时地得知内核或底层硬件设备发生了什么,从而能够更好地管理设备,给用户提供更好的服务,如 hotplug、udev 和 inotify 就是这种需求催生的。
- Hotplug 是一种内核向用户态应用通报关于热插拔设备一些事件发生的机制,桌面系统能够利用它对设备进行有效的管理,
- udev 动态地维护 /dev 下的设备文件,
- inotify 是一种文件系统的变化通知机制,如文件增加、删除等事件可以立刻让用户态得知。
inotify 可以监视的文件系统事件包括:
事件 | 描述 |
---|---|
access | 访问,读取文件。例如: cat filename.txt |
modify | 修改,文件或目录内容被修改 |
attrib | 修改,文件元数据发生改变 |
move | 移动,对文件进行移动操作 |
create | 创建,生成新文件 |
open | 打开,对文件进行打开操作 |
close | 关闭,对文件进行关闭操作 |
delete | 删除,文件被删除 |
unmount | 文件系统被卸载 |
文件事件用一个 inotify_event 结构表示:
struct inotify_event {
int wd; /* watch 文件描述符 */
uint32_t mask; /* Mask of events */
uint32_t cookie;
uint32_t len /* size of name filed */
char name[]; /* optional null-terminated name */
};
由上图得知:基于inotify的inotify事件中并没有进程信息!!!
Linux下支持inotify的内核最小为2.6.13,CentOS 5.X 内核为2.6.18,默认已经支持inotify。