欢迎各位兄弟 发布技术文章
这里的技术是共享的
当内核中文件系统发生变化时,inotiy会将监控的事件传递给用户,比如创建、删除、读、写等。
inotify的使用,创建一个文件描述符,添加一个或者监控器watch,然后使用read()方法,从文件描述符中获取事件
信息。read()是以堵塞的方式,进行读取时间信息的。
inotiy提供3个系统调用,可以用来构建各种的文件系统监控器
int inotify_init(void);
创建一个inotify的实例,成功返回文件描述符,错误返回 -1。
inotify_init() initializes a new inotify instance and returns a file descriptor associated with a
new inotify event queue.
int inotify_add_watch(int fd, const char *pathname, uint32_t mask);
inotiy_add_watch用来添加监控器。
参数:fd 文件描述符
pathname 是一个监控的目录
mask 要监控多个事件,需要使用 | 进行分隔,mask 可以为IN_MODIFY N_ATTRIB N_ATTRIB IN_DELETE 等选项
int inotify_rm_watch(int fd, int wd); 删除一个监控器
此外还需要read()和close()系统调用。
read读取的是输入流。从buffer中,按照 inotify_event类型进行去读数据。
mask就是文件变化的类型,比如创建、删除等。
name 存储的文件的名字
1
2
3
4
5
6
7
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
linux 内核提供inotify来监控文件的活动,在android系统的输入系统部门也是允许这个inotify,来监控/dev/inpu这个目录下的变化,同时在这部分还有设计到epoll。
使用 inotify 监控文件系统的活动
韦东山android输入子系统部分的内容
来自 https://blog.csdn.net/u013377887/article/details/60470005