简介
实现当有文件被修改的时候,通知程序,或者说唤醒程序。参考How do I make my program watch for file modification in C++? 以及 Monitor file system activity with inotify 以及 使用 inotify 监控文件系统的活动
API
- inotify_init是用于创建一个 inotify 实例的系统调用,并返回一个指向该实例的文件描述符。
- inotify_init1与
inotify_init
相似,并带有附加标志。如果这些附加标志没有指定,将采用与inotify_init
相同的值。 - inotify_add_watch增加对文件或者目录的监控,并指定需要监控哪些事件。标志用于控制是否将事件添加到已有的监控中,是否只有路径代表一个目录才进行监控,是否要追踪符号链接,是否进行一次性监控,当首次事件出现后就停止监控。
- inotify_rm_watch从监控列表中移出监控项目。
- read读取包含一个或者多个事件信息的缓存。
- close关闭文件描述符,并且移除所有在该描述符上的所有监控。当关于某实例的所有文件描述符都关闭时,资源和下层对象都将释放,以供内核再次使用。
/* Create and initialize inotify instance. */
extern int inotify_init (void) __THROW;
/* Create and initialize inotify instance. */
extern int inotify_init1 (int __flags) __THROW;
/* Add watch of object NAME to inotify instance FD. Notify about
events specified by MASK. */
extern int inotify_add_watch (int __fd, const char *__name, uint32_t __mask)
__THROW;
/* Remove the watch specified by WD from the inotify instance FD. */
extern int inotify_rm_watch (int __fd, int __wd) __THROW;
结构体
/* Structure describing an inotify event. */
struct inotify_event
{
int wd; /* Watch descriptor. */
uint32_t mask; /* Watch mask. */
uint32_t cookie; /* Cookie to synchronize two events. */
uint32_t len; /* Length (including NULs) of name. */
char name __flexarr; /* Name. */
};
检测文件
list1.c
只能检测单个文件,