1 | /* |
---|
2 | * Inode based directory notification for Linux |
---|
3 | * |
---|
4 | * Copyright (C) 2005 John McCutchan |
---|
5 | */ |
---|
6 | |
---|
7 | #ifndef _LINUX_INOTIFY_H |
---|
8 | #define _LINUX_INOTIFY_H |
---|
9 | |
---|
10 | #include <linux/types.h> |
---|
11 | |
---|
12 | /* |
---|
13 | * struct inotify_event - structure read from the inotify device for each event |
---|
14 | * |
---|
15 | * When you are watching a directory, you will receive the filename for events |
---|
16 | * such as IN_CREATE, IN_DELETE, IN_OPEN, IN_CLOSE, ..., relative to the wd. |
---|
17 | */ |
---|
18 | struct inotify_event { |
---|
19 | __s32 wd; /* watch descriptor */ |
---|
20 | __u32 mask; /* watch mask */ |
---|
21 | __u32 cookie; /* cookie to synchronize two events */ |
---|
22 | __u32 len; /* length (including nulls) of name */ |
---|
23 | char name[0]; /* stub for possible name */ |
---|
24 | }; |
---|
25 | |
---|
26 | /* the following are legal, implemented events that user-space can watch for */ |
---|
27 | #define IN_ACCESS 0x00000001 /* File was accessed */ |
---|
28 | #define IN_MODIFY 0x00000002 /* File was modified */ |
---|
29 | #define IN_ATTRIB 0x00000004 /* Metadata changed */ |
---|
30 | #define IN_CLOSE_WRITE 0x00000008 /* Writtable file was closed */ |
---|
31 | #define IN_CLOSE_NOWRITE 0x00000010 /* Unwrittable file closed */ |
---|
32 | #define IN_OPEN 0x00000020 /* File was opened */ |
---|
33 | #define IN_MOVED_FROM 0x00000040 /* File was moved from X */ |
---|
34 | #define IN_MOVED_TO 0x00000080 /* File was moved to Y */ |
---|
35 | #define IN_CREATE 0x00000100 /* Subfile was created */ |
---|
36 | #define IN_DELETE 0x00000200 /* Subfile was deleted */ |
---|
37 | #define IN_DELETE_SELF 0x00000400 /* Self was deleted */ |
---|
38 | |
---|
39 | /* the following are legal events. they are sent as needed to any watch */ |
---|
40 | #define IN_UNMOUNT 0x00002000 /* Backing fs was unmounted */ |
---|
41 | #define IN_Q_OVERFLOW 0x00004000 /* Event queued overflowed */ |
---|
42 | #define IN_IGNORED 0x00008000 /* File was ignored */ |
---|
43 | |
---|
44 | /* helper events */ |
---|
45 | #define IN_CLOSE (IN_CLOSE_WRITE | IN_CLOSE_NOWRITE) /* close */ |
---|
46 | #define IN_MOVE (IN_MOVED_FROM | IN_MOVED_TO) /* moves */ |
---|
47 | |
---|
48 | /* special flags */ |
---|
49 | #define IN_ISDIR 0x40000000 /* event occurred against dir */ |
---|
50 | #define IN_ONESHOT 0x80000000 /* only send event once */ |
---|
51 | |
---|
52 | /* |
---|
53 | * All of the events - we build the list by hand so that we can add flags in |
---|
54 | * the future and not break backward compatibility. Apps will get only the |
---|
55 | * events that they originally wanted. Be sure to add new events here! |
---|
56 | */ |
---|
57 | #define IN_ALL_EVENTS (IN_ACCESS | IN_MODIFY | IN_ATTRIB | IN_CLOSE_WRITE | \ |
---|
58 | IN_CLOSE_NOWRITE | IN_OPEN | IN_MOVED_FROM | \ |
---|
59 | IN_MOVED_TO | IN_DELETE | IN_CREATE | IN_DELETE_SELF) |
---|
60 | |
---|
61 | #ifdef __KERNEL__ |
---|
62 | |
---|
63 | #include <linux/dcache.h> |
---|
64 | #include <linux/fs.h> |
---|
65 | #include <linux/config.h> |
---|
66 | |
---|
67 | #ifdef CONFIG_INOTIFY |
---|
68 | |
---|
69 | extern void inotify_inode_queue_event(struct inode *, __u32, __u32, |
---|
70 | const char *); |
---|
71 | extern void inotify_dentry_parent_queue_event(struct dentry *, __u32, __u32, |
---|
72 | const char *); |
---|
73 | extern void inotify_unmount_inodes(struct list_head *); |
---|
74 | extern void inotify_inode_is_dead(struct inode *); |
---|
75 | extern u32 inotify_get_cookie(void); |
---|
76 | |
---|
77 | #else |
---|
78 | |
---|
79 | static inline void inotify_inode_queue_event(struct inode *inode, |
---|
80 | __u32 mask, __u32 cookie, |
---|
81 | const char *filename) |
---|
82 | { |
---|
83 | } |
---|
84 | |
---|
85 | static inline void inotify_dentry_parent_queue_event(struct dentry *dentry, |
---|
86 | __u32 mask, __u32 cookie, |
---|
87 | const char *filename) |
---|
88 | { |
---|
89 | } |
---|
90 | |
---|
91 | static inline void inotify_unmount_inodes(struct list_head *list) |
---|
92 | { |
---|
93 | } |
---|
94 | |
---|
95 | static inline void inotify_inode_is_dead(struct inode *inode) |
---|
96 | { |
---|
97 | } |
---|
98 | |
---|
99 | static inline u32 inotify_get_cookie(void) |
---|
100 | { |
---|
101 | return 0; |
---|
102 | } |
---|
103 | |
---|
104 | #endif /* CONFIG_INOTIFY */ |
---|
105 | |
---|
106 | #endif /* __KERNEL __ */ |
---|
107 | |
---|
108 | #endif /* _LINUX_INOTIFY_H */ |
---|