几个面具的inotify_add_watch

时间:2014-05-14 01:39:39

标签: c linux operating-system filesystems inotify

我想监视对目录/文件的更改。如果我想监视只说5个事件 使用以下面具

IN_OPEN
IN_CREATE
IN_DELETE
IN_CLOSE_WRITE

例如,

我是否必须在每个面具上调用inotify_add_watch(),或者是否有办法将面具聚集在一起,以便inotify_add_watch被调用一次?

2 个答案:

答案 0 :(得分:3)

他们可以在inotify_add_watch()的一次通话中'或',即:

wd = inotify_add_watch(fd, path, IN_CREATE|IN_DELETE);

任何位组合可以在以下限制内“或”:

/* the following are legal, implemented events that user-space can watch for */
#define IN_ACCESS           0x00000001  /* File was accessed */
#define IN_MODIFY           0x00000002  /* File was modified */
#define IN_ATTRIB           0x00000004  /* Metadata changed */
#define IN_CLOSE_WRITE      0x00000008  /* Writtable file was closed */
#define IN_CLOSE_NOWRITE    0x00000010  /* Unwrittable file closed */
#define IN_OPEN             0x00000020  /* File was opened */
#define IN_MOVED_FROM       0x00000040  /* File was moved from X */
#define IN_MOVED_TO         0x00000080  /* File was moved to Y */
#define IN_CREATE           0x00000100  /* Subfile was created */
#define IN_DELETE           0x00000200  /* Subfile was deleted */
#define IN_DELETE_SELF      0x00000400  /* Self was deleted */

/* the following are legal events.  they are sent as needed to any watch */
#define IN_UNMOUNT          0x00002000  /* Backing fs was unmounted */
#define IN_Q_OVERFLOW       0x00004000  /* Event queued overflowed */
#define IN_IGNORED          0x00008000  /* File was ignored */

/* helper events */
#define IN_CLOSE            (IN_CLOSE_WRITE | IN_CLOSE_NOWRITE) /* close */
#define IN_MOVE             (IN_MOVED_FROM | IN_MOVED_TO) /* moves */

/* special flags */
#define IN_ISDIR            0x40000000  /* event occurred against dir */
#define IN_ONESHOT          0x80000000  /* only send event once */

/*
 * All of the events - we build the list by hand so that we can add flags in
 * the future and not break backward compatibility.  Apps will get only the
 * events that they originally wanted.  Be sure to add new events here!
 */
#define IN_ALL_EVENTS (IN_ACCESS | IN_MODIFY | IN_ATTRIB | IN_CLOSE_WRITE | \
         IN_CLOSE_NOWRITE | IN_OPEN | IN_MOVED_FROM | \
         IN_MOVED_TO | IN_DELETE | IN_CREATE | IN_DELETE_SELF)

(以上是来自inotify.h)

答案 1 :(得分:1)

您可以使用" OR"结合面具的操作:

  wd = inotify_add_watch( fd, "<path of dir>", IN_CREATE | IN_DELETE );

否则,如果您想使用所有面具,请使用

  wfd = inotify_add_watch(ifd,"<path of dir>",IN_ALL_EVENTS);

这是所有面具的组合。