马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
x
inotify作用
inoify是一种文件系统变乱监控机制,linux内核从2.6.13起,参加了inotify支持,通过inotify可以监控文件系统添加、删除、移动、修改等各种变乱,利用这个内核接口,第三方软件就可以监控文件系统下文件的各种变化环境。
inotify用法
- #include<sys/inotify.h>
- #include<stdio.h>
- #include<errno.h>
- #include<string.h>
- void watch_new_event(struct inotify_event *e)
- {
- if(e->len == 0)
- {
- printf("error event\n");
- return;
- }
- if(e->mask & (IN_MOVED_TO | IN_CREATE))
- {
- printf("%s\n", e->name);
- }
- }
- int file_watcher()
- {
- struct inotify_event *event;
- int fd,wd;
- char path[32] = "/home/test";
- fd = inotify_init(); //首先通过inotify_init函数初始化一个inotify实例,该函数会返回一个文件描述符,用于后续的操作。
- if(fd == -1)
- {
- printf("inotify_init failed\n");
- }
- wd = inotify_add_watch(fd, path, IN_MOVED_TO | IN_CREATE); //一旦有了inotify实例,就可以通过inotify_add_watch函数添加监控对象。这个函数需要文件描述符、要监控的文件或目录以及事件掩码作为参数。后续可以将wd值与path做一个映射关系,通过e->wd,找到路径path。
- if(wd == -1)
- {
- printf("add watch failed:%s\n", strerror(errno));
- }
-
- int num_read;
- char *p;
- char buf[256];
- for(;;)
- {
- num_read = read(fd, buf, 256);
- if(num_read == 0 && num_read == -1)
- {
- printf("watcher read error\n");
- goto exit;
- }
- for(p = buf; p < buf + num_read; )
- {
- event = (struct inotify_event *)p;
- watch_new_event(event);
- p += sizeof(struct inotify_event) + event->len;
- }
- }
- exit:
- inotify_rm_watch(fd,wd);
- return 0;
- }
- int main()
- {
- file_watcher();
- return 0;
- }
复制代码 检测变乱和对应的mask值
变乱范例 | 变乱掩码值 | IN_ACCESS | 1 | IN_MODIFY | 2 | IN_ATTRIB | 4 | IN_CLOSE_WRITE | 8 | IN_CLOSE_NOWRITE | 16 | IN_OPEN | 32 | IN_MOVED_FROM | 64 | IN_MOVED_TO | 128 | IN_CREATE | 256 | IN_DELETE | 512 | IN_DELETE_SELF | 1024 | IN_MOVE_SELF | 2048 |
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |