forked from apache/nuttx
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Signed-off-by: guohao15 <guohao15@xiaomi.com>
- Loading branch information
1 parent
969a5b5
commit f95b73f
Showing
2 changed files
with
135 additions
and
1 deletion.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,133 @@ | ||
======= | ||
Inotify | ||
======= | ||
Inotify is a kernel subsystem designed for monitoring filesystem events. It enables applications to monitor changes to files and directories in real-time, such as creation, deletion, modification, renaming, and more. inotify offers an efficient way to detect changes in the filesystem without the need for polling, thereby conserving system resources. | ||
|
||
CONFIG | ||
------ | ||
.. code-block:: c | ||
COFNIG_FS_NOTIFY=y | ||
User Space API | ||
-------------- | ||
|
||
All inotify user interfaces are declared in the file ``include/sys/inotify.h``. | ||
And the usage is consistent with the Linux version. | ||
|
||
.. c:function:: int inotify_init(void) | ||
Initializes a new inotify instance and returns a file descriptor | ||
associated with a new inotify event queue. | ||
.. c:function:: int inotify_init1(int flags) | ||
inotify_init1 is an extended version of inotify_init, offering additional | ||
options for initializing an inotify instance. Unlike inotify_init, | ||
inotify_init1 allows you to specify certain flags to control the behavior of | ||
the inotify instance. | ||
.. c:function:: int inotify_add_watch(int fd, FAR const char *pathname, uint32_t mask) | ||
Add a new watch, or modifies an existing watch, for the file whose | ||
location is specified in pathname; the caller must have read permission | ||
for this file. The fd argument is a file descriptor referring to the | ||
inotify instance whose watch list is to be modified. The events to be | ||
monitored for pathname are specified in the mask bit-mask argument. | ||
.. c:function:: int inotify_rm_watch(int fd, uint32_t wd) | ||
Removes the watch associated with the watch descriptor wd from the | ||
inotify instance associated with the file descriptor fd. | ||
Reading events from an inotify file descriptor | ||
---------------------------------------------- | ||
To determine what events have occurred, an application read from | ||
the inotify file descriptor. If no events have so far occurred, then, | ||
assuming a blocking file descriptor, read will block until at least | ||
one event occurs | ||
Each successful read returns a buffer containing one or more of the | ||
following structures: | ||
.. code-block:: c | ||
struct inotify_event { | ||
int wd; /* Watch descriptor */ | ||
uint32_t mask; /* Mask describing event */ | ||
uint32_t cookie; /* Unique cookie associating related | ||
events (for rename(2)) */ | ||
uint32_t len; /* Size of name field */ | ||
char name[]; /* Optional null-terminated name */ | ||
}; | ||
**wd** identifies the watch for which this event occurs. It is one of the | ||
watch descriptors returned by a previous call to inotify_add_watch. | ||
**mask** contains bits that describe the event that occurred | ||
**cookie** is a unique integer that connects related events. Currently, | ||
this is used only for rename events, and allows the resulting pair of | ||
IN_MOVED_FROM and IN_MOVED_TO events to be connected by the application | ||
For all other event types, cookie is set to 0. | ||
The **name** field is present only when an event is returned for a file | ||
inside a watched directory; it identifies the filename within the watched | ||
directory. This filename is null-terminated, and may include further | ||
null bytes ('\0') to align subsequent reads to a suitable address boundary. | ||
The **len** field counts all of the bytes in name, including the null | ||
bytes; the length of each inotify_event structure is thus sizeof(struct | ||
inotify_event)+len. | ||
inotify events | ||
-------------- | ||
The **inotify_add_watch** mask argument and the mask field of the inotify_event | ||
structure returned when reading an inotify file descriptor are both bit masks | ||
identifying inotify events. The following bits can be specified in mask when | ||
calling inotify_add_watch and may be returned in the mask field returned by read. | ||
**IN_ACCESS** :File was accessed | ||
**IN_MODIFY** :File was modified | ||
**IN_ATTRIB** :Metadata changed | ||
**IN_OPEN** :File was opened | ||
**IN_MOVED_FROM** :File was moved from X | ||
**IN_MOVED_TO** :File was moved to Y | ||
**IN_CREATE** :Subfile was created | ||
**IN_DELETE** :Subfile was deleted | ||
**IN_DELETE_SELF** :Self was deleted | ||
**IN_MOVE_SELF** :Self was moved | ||
Examples | ||
-------- | ||
Suppose an application is watching the directory ``dir`` and the file | ||
``dir/myfile`` for all events. The examples below show some events that | ||
will be generated for these two objects. | ||
fd = open("dir/myfile", O_RDWR); | ||
Generates **IN_OPEN** events for both ``dir`` and ``dir/myfile``. | ||
read(fd, buf, count); | ||
Generates **IN_ACCESS** events for both ``dir`` and ``dir/myfile``. | ||
write(fd, buf, count); | ||
Generates **IN_MODIFY** events for both ``dir`` and ``dir/myfile``. | ||
fchmod(fd, mode); | ||
Generates **IN_ATTRIB** events for both ``dir`` and ``dir/myfile``. | ||
NOTE | ||
---- | ||
Inotify file descriptors can be monitored using select, poll, and | ||
epoll. When an event is available, the file descriptor indicates as | ||
readable. |