Inotify

inotify – monitoring file system events

Inotify API 提供监控文件系统事件的机制,Inotify可以用来监控文件或者目录。当一个目录被监控时,inotify将会为目录本身或目录中的文件返回事件

该API用下以下系统调用

  • inotify_init (inotify_init创建一个inotify实例并返回一个引用inotify实例的文件描述符。)
  • inotify_add_watch (inotify_add_watch 操控与inotify相关连实例的监测列表,每个在监视列表中项都指定了文件或目录的目录路径名称以及一些事件的集合)
  • inotify_rm_watch(inotify_rm_watch 从监视列表中移除指定项)
  • read(确定某项事件发生,一个应用程序将从inotify文件描述符中读出)
  • close

每个成功的read将返回一个包涵一个或这个以下数据结构的buffer

struct inotify_event {
               int      wd;       /* Watch descriptor */
               uint32_t mask;     /* Mask of events */
               uint32_t cookie;   /* Unique cookie associating related
                                     events (for rename(2)) */
               uint32_t len;      /* Size of name field */
               char     name[];   /* Optional null-terminated name */
 };

inotify 常用事件

  • IN_ACCESS (文件被读取)
  • IN_ATTRIB (元信息被改变,例如文件权限,时间戳,拓展属性,链接数量,UID,GID等)
  • IN_CLOSE_WRITE (已打开供编写的文件已关闭)
  • IN_CLOSE_NOWRITE (已打开供编写的文件已关闭)
  • IN_CREATE (在被监视的目录中创建的文件/目录)
  • IN_DELETE (从监视目录中删除的文件/目录)
  • IN_DELETE_SELF (被监视的文件/目录自己被删除)
  • IN_MODIFY (文件被修改)
  • IN_MOVE_SELF (被监控的文件/目录自己被移动)
  • IN_MOVED_FROM (当文件重命名时,为包含旧文件名的目录生成。)
  • IN_MOVED_TO (当文件重命名时,为包含新文件名的目录生成。)
  • IN_OPEN(文件被打开)
  • IN_ALL_EVENTS (所有事件)

C程序例子用来监控目录 (文件传输)

stackoverflow

测试一下效果