IT评测·应用市场-qidao123.com技术社区

标题: C语言inotify用法 [打印本页]

作者: 万万哇    时间: 2024-10-29 17:14
标题: C语言inotify用法
inotify作用

inoify是一种文件系统变乱监控机制,linux内核从2.6.13起,参加了inotify支持,通过inotify可以监控文件系统添加、删除、移动、修改等各种变乱,利用这个内核接口,第三方软件就可以监控文件系统下文件的各种变化环境。
inotify用法

  1. #include<sys/inotify.h>
  2. #include<stdio.h>
  3. #include<errno.h>
  4. #include<string.h>
  5. void watch_new_event(struct inotify_event *e)
  6. {
  7.     if(e->len == 0)
  8.     {
  9.         printf("error event\n");
  10.         return;
  11.     }
  12.     if(e->mask & (IN_MOVED_TO | IN_CREATE))
  13.     {
  14.         printf("%s\n", e->name);
  15.     }
  16. }
  17. int file_watcher()
  18. {
  19.     struct inotify_event *event;
  20.     int fd,wd;
  21.     char path[32] = "/home/test";
  22.     fd = inotify_init(); //首先通过inotify_init函数初始化一个inotify实例,该函数会返回一个文件描述符,用于后续的操作。
  23.     if(fd == -1)
  24.     {
  25.         printf("inotify_init failed\n");
  26.     }
  27.     wd = inotify_add_watch(fd, path, IN_MOVED_TO | IN_CREATE);  //一旦有了inotify实例,就可以通过inotify_add_watch函数添加监控对象。这个函数需要文件描述符、要监控的文件或目录以及事件掩码作为参数。后续可以将wd值与path做一个映射关系,通过e->wd,找到路径path。
  28.     if(wd == -1)
  29.     {
  30.         printf("add watch failed:%s\n", strerror(errno));
  31.     }
  32.    
  33.     int num_read;
  34.     char *p;
  35.     char buf[256];
  36.     for(;;)
  37.     {
  38.         num_read = read(fd, buf, 256);
  39.         if(num_read == 0 && num_read == -1)
  40.         {
  41.             printf("watcher read error\n");
  42.             goto exit;
  43.         }
  44.         for(p = buf; p < buf + num_read; )
  45.         {
  46.             event = (struct inotify_event *)p;
  47.             watch_new_event(event);
  48.             p += sizeof(struct inotify_event) + event->len;
  49.         }
  50.     }
  51. exit:
  52.     inotify_rm_watch(fd,wd);
  53.     return 0;
  54. }
  55. int main()
  56. {
  57.     file_watcher();
  58.     return 0;
  59. }
复制代码
检测变乱和对应的mask值

变乱范例变乱掩码值
IN_ACCESS1
IN_MODIFY2
IN_ATTRIB4
IN_CLOSE_WRITE8
IN_CLOSE_NOWRITE16
IN_OPEN32
IN_MOVED_FROM64
IN_MOVED_TO128
IN_CREATE256
IN_DELETE512
IN_DELETE_SELF1024
IN_MOVE_SELF2048


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 IT评测·应用市场-qidao123.com技术社区 (https://dis.qidao123.com/) Powered by Discuz! X3.4