]> git.ipfire.org Git - thirdparty/man-pages.git/blame - man7/inotify.7
inotify.7: Add some examples of events generated by various system calls
[thirdparty/man-pages.git] / man7 / inotify.7
CommitLineData
4d2b74dd 1'\" t
415f63be 2.\" Copyright (C) 2006, 2014 Michael Kerrisk <mtk.manpages@gmail.com>
4d2b74dd 3.\"
93015253 4.\" %%%LICENSE_START(VERBATIM)
4d2b74dd
MK
5.\" Permission is granted to make and distribute verbatim copies of this
6.\" manual provided the copyright notice and this permission notice are
7.\" preserved on all copies.
8.\"
9.\" Permission is granted to copy and distribute modified versions of this
10.\" manual under the conditions for verbatim copying, provided that the
11.\" entire resulting derived work is distributed under the terms of a
12.\" permission notice identical to this one.
c13182ef 13.\"
4d2b74dd
MK
14.\" Since the Linux kernel and libraries are constantly changing, this
15.\" manual page may be incorrect or out-of-date. The author(s) assume no
16.\" responsibility for errors or omissions, or for damages resulting from
10d76543
MK
17.\" the use of the information contained herein. The author(s) may not
18.\" have taken the same level of care in the production of this manual,
19.\" which is licensed free of charge, as they might when working
20.\" professionally.
c13182ef 21.\"
4d2b74dd
MK
22.\" Formatted or processed versions of this manual, if unaccompanied by
23.\" the source, must acknowledge the copyright and authors of this work.
4b72fb64 24.\" %%%LICENSE_END
4d2b74dd 25.\"
7b5151b7 26.TH INOTIFY 7 2014-03-28 "Linux" "Linux Programmer's Manual"
4d2b74dd 27.SH NAME
9ee4a2b6 28inotify \- monitoring filesystem events
4d2b74dd
MK
29.SH DESCRIPTION
30The
c13182ef 31.I inotify
9ee4a2b6 32API provides a mechanism for monitoring filesystem events.
4d2b74dd
MK
33Inotify can be used to monitor individual files,
34or to monitor directories.
35When a directory is monitored, inotify will return events
36for the directory itself, and for files inside the directory.
37
c13182ef 38The following system calls are used with this API:
43bb5faf 39.BR inotify_init (2)
c5571b61 40(or
43bb5faf 41.BR inotify_init1 (2)),
63f6a20a
MK
42.BR inotify_add_watch (2),
43.BR inotify_rm_watch (2),
44.BR read (2),
c13182ef 45and
63f6a20a 46.BR close (2).
4d2b74dd
MK
47
48.BR inotify_init (2)
c13182ef 49creates an inotify instance and returns a file descriptor
a2cc46ca 50referring to the inotify instance.
43bb5faf
MK
51The more recent
52.BR inotify_init1 (2)
53is like
54.BR inotify_init (2),
55but provides some extra functionality.
4d2b74dd
MK
56
57.BR inotify_add_watch (2)
a2cc46ca 58manipulates the "watch list" associated with an inotify instance.
3a065ac0 59Each item ("watch") in the watch list specifies the pathname of
c13182ef 60a file or directory,
4d2b74dd
MK
61along with some set of events that the kernel should monitor for the
62file referred to by that pathname.
63f6a20a 63.BR inotify_add_watch (2)
4d2b74dd
MK
64either creates a new watch item, or modifies an existing watch.
65Each watch has a unique "watch descriptor", an integer
66returned by
63f6a20a 67.BR inotify_add_watch (2)
4d2b74dd
MK
68when the watch is created.
69
70.BR inotify_rm_watch (2)
71removes an item from an inotify watch list.
72
c13182ef 73When all file descriptors referring to an inotify
a2cc46ca 74instance have been closed,
c13182ef 75the underlying object and its resources are
3b777aff 76freed for reuse by the kernel;
4d2b74dd
MK
77all associated watches are automatically freed.
78
79To determine what events have occurred, an application
80.BR read (2)s
81from the inotify file descriptor.
c13182ef 82If no events have so far occurred, then,
11da88fb 83assuming a blocking file descriptor,
63f6a20a 84.BR read (2)
01538d0d
MK
85will block until at least one event occurs
86(unless interrupted by a signal,
87in which case the call fails with the error
88.BR EINTR ;
89see
90.BR signal (7)).
4d2b74dd
MK
91
92Each successful
63f6a20a 93.BR read (2)
4d2b74dd 94returns a buffer containing one or more of the following structures:
a08ea57c 95.in +4n
4d2b74dd
MK
96.nf
97
98struct inotify_event {
99 int wd; /* Watch descriptor */
24bbe02c
MK
100.\" FIXME . The type of the 'wd' field should probably be "int32_t".
101.\" I submitted a patch to fix this. See the LKML thread
102.\" "[patch] Fix type errors in inotify interfaces", 18 Nov 2008
6e6231c1 103.\" Glibc bug filed: http://sources.redhat.com/bugzilla/show_bug.cgi?id=7040
4d2b74dd 104 uint32_t mask; /* Mask of events */
c13182ef 105 uint32_t cookie; /* Unique cookie associating related
4d2b74dd 106 events (for rename(2)) */
84c517a4 107 uint32_t len; /* Size of \fIname\fP field */
4d2b74dd
MK
108 char name[]; /* Optional null-terminated name */
109};
110.fi
a08ea57c 111.in
4d2b74dd
MK
112
113.I wd
114identifies the watch for which this event occurs.
c13182ef 115It is one of the watch descriptors returned by a previous call to
63f6a20a 116.BR inotify_add_watch (2).
4d2b74dd
MK
117
118.I mask
119contains bits that describe the event that occurred (see below).
120
121.I cookie
122is a unique integer that connects related events.
33a0ccb2 123Currently this is used only for rename events, and
4d2b74dd 124allows the resulting pair of
bc636d8a 125.B IN_MOVED_FROM
c13182ef 126and
bc636d8a 127.B IN_MOVED_TO
4d2b74dd 128events to be connected by the application.
591b7a5f
MK
129For all other event types,
130.I cookie
131is set to 0.
4d2b74dd 132
c13182ef 133The
4d2b74dd 134.I name
33a0ccb2 135field is present only when an event is returned
c13182ef 136for a file inside a watched directory;
4d2b74dd 137it identifies the file pathname relative to the watched directory.
c13182ef 138This pathname is null-terminated,
1aff5804 139and may include further null bytes (\(aq\\0\(aq) to align subsequent reads to a
4d2b74dd
MK
140suitable address boundary.
141
142The
143.I len
c13182ef 144field counts all of the bytes in
4d2b74dd 145.IR name ,
c13182ef 146including the null bytes;
4d2b74dd
MK
147the length of each
148.I inotify_event
149structure is thus
655684a9 150.IR "sizeof(struct inotify_event)+len" .
c7e3ee6f 151
988db661 152The behavior when the buffer given to
c7e3ee6f 153.BR read (2)
988db661 154is too small to return information about the next event depends
c7e3ee6f
MK
155on the kernel version: in kernels before 2.6.21,
156.BR read (2)
157returns 0; since kernel 2.6.21,
158.BR read (2)
159fails with the error
160.BR EINVAL .
4ba272b3
MK
161Specifying a buffer of size
162
163 sizeof(struct inotify_event) + NAME_MAX + 1
164
165will be sufficient to read at least one event.
4d2b74dd 166.SS inotify events
c13182ef 167The
4d2b74dd
MK
168.BR inotify_add_watch (2)
169.I mask
c13182ef 170argument and the
4d2b74dd
MK
171.I mask
172field of the
173.I inotify_event
174structure returned when
175.BR read (2)ing
176an inotify file descriptor are both bit masks identifying
177inotify events.
178The following bits can be specified in
179.I mask
180when calling
63f6a20a 181.BR inotify_add_watch (2)
c13182ef 182and may be returned in the
4d2b74dd
MK
183.I mask
184field returned by
63f6a20a 185.BR read (2):
64aa9bcb 186.RS 4
c577b95c 187.TP
f23fc716 188.BR IN_ACCESS " (*)"
70f70c9d
MK
189File was accessed (e.g.,
190.BR read (2),
f23fc716 191.BR execve (2)).
3f174f7d 192.TP
f23fc716 193.BR IN_ATTRIB " (*)"
b0e1ac43
MK
194Metadata changed\(emfor example, permissions (e.g.,
195.BR chmod (2)),
196timestamps (e.g.,
197.BR utimensat (2)),
198extended attributes
199.RB ( setxattr (2)),
200link count (since Linux 2.6.25; e.g.,
201for the target of
202.BR link (2)
203and for
204.BR unlink (2)),
205and user/group ID (e.g.,
206.BR chown (2)).
3f174f7d 207.TP
f23fc716
MK
208.BR IN_CLOSE_WRITE " (*)"
209File opened for writing was closed.
3f174f7d 210.TP
f23fc716
MK
211.BR IN_CLOSE_NOWRITE " (*)"
212File not opened for writing was closed.
3f174f7d 213.TP
f23fc716 214.BR IN_CREATE " (*)"
7a64793b
MK
215File/directory created in watched directory (e.g.,
216.BR open (2)
217.BR O_CREAT ,
218.BR mkdir (2),
219.BR link (2),
220.BR bind (2)
221on a UNIX domain socket).
3f174f7d 222.TP
f23fc716
MK
223.BR IN_DELETE " (*)"
224File/directory deleted from watched directory.
3f174f7d
MK
225.TP
226.B IN_DELETE_SELF
227Watched file/directory was itself deleted.
4a1e4cca
MK
228(This event also occurs if an object is moved to another filesystem,
229since
230.BR mv (1)
231in effect copies the file to the other filesystem and
49b07b8f 232then deletes it from the original filesystem.)
39f43968
MK
233In addition, an
234.B IN_IGNORED
235event will subsequently be generated for the watch descriptor.
3f174f7d 236.TP
f23fc716 237.BR IN_MODIFY " (*)"
f54a1255
MK
238File was modified (e.g.,
239.BR write (2),
240.BR truncate (2)).
3f174f7d
MK
241.TP
242.B IN_MOVE_SELF
243Watched file/directory was itself moved.
244.TP
f23fc716 245.BR IN_MOVED_FROM " (*)"
107375cf 246Generated for the directory containing the old filename
f23fc716 247when a file is renamed.
3f174f7d 248.TP
f23fc716 249.BR IN_MOVED_TO " (*)"
107375cf 250Generated for the directory containing the new filename
f23fc716 251when a file is renamed.
3f174f7d 252.TP
f23fc716
MK
253.BR IN_OPEN " (*)"
254File was opened.
64aa9bcb 255.RE
4d2b74dd 256.PP
c13182ef
MK
257When monitoring a directory,
258the events marked with an asterisk (*) above can occur for
4d2b74dd
MK
259files in the directory, in which case the
260.I name
261field in the returned
262.I inotify_event
263structure identifies the name of the file within the directory.
264.PP
265The
266.B IN_ALL_EVENTS
267macro is defined as a bit mask of all of the above events.
268This macro can be used as the
269.I mask
270argument when calling
63f6a20a 271.BR inotify_add_watch (2).
4d2b74dd 272
dede00fe 273Two additional convenience macros are defined:
64aa9bcb 274.RS 4
dede00fe
MK
275.TP
276.BR IN_MOVE
277Equates to
278.BR "IN_MOVED_FROM | IN_MOVED_TO" .
279.TP
280.BR IN_CLOSE
281Equates to
282.BR "IN_CLOSE_WRITE | IN_CLOSE_NOWRITE" .
64aa9bcb 283.RE
4d2b74dd 284.PP
c13182ef 285The following further bits can be specified in
4d2b74dd
MK
286.I mask
287when calling
63f6a20a 288.BR inotify_add_watch (2):
64aa9bcb 289.RS 4
c577b95c 290.TP
31daf529 291.BR IN_DONT_FOLLOW " (since Linux 2.6.15)"
aeb9b6a6
MK
292Don't dereference
293.I pathname
294if it is a symbolic link.
dda869a4 295.TP
0ff2cc88 296.BR IN_EXCL_UNLINK " (since Linux 2.6.36)"
b3ad7609
MK
297.\" commit 8c1934c8d70b22ca8333b216aec6c7d09fdbd6a6
298By default, when watching events on the children of a directory,
299events are generated for children even after they have been unlinked
300from the directory.
301This can result in large numbers of uninteresting events for
302some applications (e.g., if watching
303.IR /tmp ,
304in which many applications create temporary files whose
305names are immediately unlinked).
306Specifying
307.B IN_EXCL_UNLINK
308changes the default behavior,
309so that events are not generated for children after
310they have been unlinked from the watched directory.
311.TP
dda869a4
MK
312.B IN_MASK_ADD
313Add (OR) events to watch mask for this pathname if
314it already exists (instead of replacing mask).
315.TP
316.B IN_ONESHOT
aeb9b6a6
MK
317Monitor
318.I pathname
319for one event, then remove from
dda869a4
MK
320watch list.
321.TP
31daf529 322.BR IN_ONLYDIR " (since Linux 2.6.15)"
aeb9b6a6
MK
323Only watch
324.I pathname
325if it is a directory.
64aa9bcb 326.RE
4d2b74dd
MK
327.PP
328The following bits may be set in the
329.I mask
330field returned by
63f6a20a 331.BR read (2):
64aa9bcb 332.RS 4
c577b95c 333.TP
dda869a4 334.B IN_IGNORED
aeb9b6a6
MK
335Watch was removed explicitly
336.RB ( inotify_rm_watch (2))
9ee4a2b6 337or automatically (file was deleted, or filesystem was unmounted).
7b5151b7 338See also BUGS.
dda869a4
MK
339.TP
340.B IN_ISDIR
341Subject of this event is a directory.
342.TP
343.B IN_Q_OVERFLOW
aeb9b6a6
MK
344Event queue overflowed
345.RI ( wd
346is \-1 for this event).
dda869a4
MK
347.TP
348.B IN_UNMOUNT
9ee4a2b6 349Filesystem containing watched object was unmounted.
b01c936e
MK
350In addition, an
351.B IN_IGNORED
352event will subsequently be generated for the watch descriptor.
64aa9bcb 353.RE
415f63be
MK
354.SS Examples
355Suppose an application is watching the directory
356.I dir
357and the file
358.IR dir/myfile
359for all events.
360The examples below show some events that will be generated
361for these two objects.
362.RS 4
363.TP
364fd = open("dir/myfile", O_RDWR);
365Generates
366.B IN_OPEN
367events for both
368.I dir
369and
370.IR dir/myfile .
371.TP
372read(fd, buf, count);
373Generates
374.B IN_ACCESS
375events for both
376.I dir
377and
378.IR dir/myfile .
379.TP
380write(fd, buf, count);
381Generates
382.B IN_MODIFY
383events for both
384.I dir
385and
386.IR dir/myfile .
387.TP
388fchmod(fd, mode);
389Generates
390.B IN_ATTRIB
391events for both
392.I dir
393and
394.IR dir/myfile .
395.TP
396close(fd);
397Generates
398.B IN_CLOSE_WRITE
399events for both
400.I dir
401and
402.IR dir/myfile .
403.RE
404.PP
405Suppose an application is watching the directories
406.I dir1
407and
408.IR dir ,
409and the file
410.IR dir1/myfile .
411The following examples show some events that may be generated.
412.RS 4
413.TP
414link("dir/myfile", "dir2/new");
415Generates an
416.B IN_ATTRIB
417event for
418.IR myfile
419and an
420.B IN_CREATE
421event for
422.IR dir2 .
423.TP
424rename("dir1/myfile", "dir2/myfile");
425Generates an
426.B IN_MOVED_FROM
427event for
428.IR dir1 ,
429an
430.B IN_MOVED_TO
431event for
432.IR dir2 ,
433and an
434.B IN_MOVE_SELF
435event for
436.IR myfile .
437The
438.B IN_MOVED_FROM
439and
440.B IN_MOVED_TO
441events will have the same
442.I cookie
443value.
444.RE
445.PP
446Suppose that
447.IR dir1/xx
448and
449.IR dir2/yy
450are (the only) links to the same file, and an application is watching
451.IR dir1 ,
452.IR dir2 ,
453.IR dir1/xx ,
454and
455.IR dir2/yy .
456Executing the following calls in the order given below will generate
457the following events:
458.RS 4
459.TP
460unlink("dir2/yy");
461Generates
462.BR IN_ATTRIB
463event for
464.IR xx
465(because its link count changes)
466and an
467.B IN_DELETE
468event for
469.IR dir2 .
470.TP
471unlink("dir1/xx");
472Generates
473.BR IN_ATTRIB ,
474.BR IN_DELETE_SELF ,
475and
476.BR IN_IGNORED
477events for
478.IR xx ,
479and an
480.BR IN_DELETE
481for
482.IR dir1 .
483.RE
484.PP
485Suppose an application is watching the directory
486.IR dir
487and (the empty) directory
488.IR dir/subdir .
489The following examples show some events that may be generated.
490.RS 4
491.TP
492mkdir("dir/new", mode);
493Generates an
494.B "IN_CREATE | IN_ISDIR"
495event for
496.IR dir .
497.TP
498rmdir("dir/sub");
499Generates
500.B IN_DELETE_SELF
501and
502.B IN_IGNORED
503events for
504.IR subdir ,
505and an
506.B "IN_DELETE | IN_ISDIR"
507event for
508.IR dir .
509.RE
4d2b74dd 510.SS /proc interfaces
c13182ef 511The following interfaces can be used to limit the amount of
4d2b74dd
MK
512kernel memory consumed by inotify:
513.TP
0daa9e92 514.I /proc/sys/fs/inotify/max_queued_events
4d2b74dd
MK
515The value in this file is used when an application calls
516.BR inotify_init (2)
c13182ef 517to set an upper limit on the number of events that can be
4d2b74dd
MK
518queued to the corresponding inotify instance.
519Events in excess of this limit are dropped, but an
520.B IN_Q_OVERFLOW
521event is always generated.
522.TP
0daa9e92 523.I /proc/sys/fs/inotify/max_user_instances
c13182ef 524This specifies an upper limit on the number of inotify instances
4d2b74dd
MK
525that can be created per real user ID.
526.TP
0daa9e92 527.I /proc/sys/fs/inotify/max_user_watches
31546b46
VN
528This specifies an upper limit on the number of watches
529that can be created per real user ID.
47297adb 530.SH VERSIONS
2b2581ee
MK
531Inotify was merged into the 2.6.13 Linux kernel.
532The required library interfaces were added to glibc in version 2.4.
533.RB ( IN_DONT_FOLLOW ,
534.BR IN_MASK_ADD ,
535and
536.B IN_ONLYDIR
64aa9bcb 537were added in glibc version 2.5.)
47297adb 538.SH CONFORMING TO
8382f16d 539The inotify API is Linux-specific.
47297adb 540.SH NOTES
4d2b74dd
MK
541Inotify file descriptors can be monitored using
542.BR select (2),
543.BR poll (2),
c13182ef 544and
2315114c 545.BR epoll (7).
0000daa5
MK
546When an event is available, the file descriptor indicates as readable.
547
548Since Linux 2.6.25,
549signal-driven I/O notification is available for inotify file descriptors;
550see the discussion of
551.B F_SETFL
552(for setting the
553.B O_ASYNC
554flag),
555.BR F_SETOWN ,
556and
557.B F_SETSIG
558in
559.BR fcntl (2).
560The
561.I siginfo_t
562structure (described in
563.BR sigaction (2))
564that is passed to the signal handler has the following fields set:
565.IR si_fd
566is set to the inotify file descriptor number;
567.IR si_signo
568is set to the signal number;
569.IR si_code
570is set to
571.BR POLL_IN ;
572and
573.B POLLIN
574is set in
575.IR si_band .
4d2b74dd 576
c13182ef
MK
577If successive output inotify events produced on the
578inotify file descriptor are identical (same
579.IR wd ,
580.IR mask ,
4d2b74dd
MK
581.IR cookie ,
582and
3f3698d8 583.IR name ),
6f0ab035
MK
584then they are coalesced into a single event if the
585older event has not yet been read (but see BUGS).
8856aab8
MK
586This reduces the amount of kernel memory required for the event queue,
587but also means that an application can't use inotify to reliably count
588file events.
4d2b74dd 589
c13182ef
MK
590The events returned by reading from an inotify file descriptor
591form an ordered queue.
592Thus, for example, it is guaranteed that when renaming from
593one directory to another, events will be produced in the
4d2b74dd
MK
594correct order on the inotify file descriptor.
595
596The
597.B FIONREAD
63f6a20a 598.BR ioctl (2)
c13182ef 599returns the number of bytes available to read from an
4d2b74dd 600inotify file descriptor.
613836aa 601.SS Limitations and caveats
4d2b74dd
MK
602Inotify monitoring of directories is not recursive:
603to monitor subdirectories under a directory,
604additional watches must be created.
613836aa
MK
605This can take a significant amount time for large directory trees.
606
4d2ddb4e
MK
607The inotify API provides no information about the user or process that
608triggered the inotify event.
99e603bd
MK
609In particular, there is no easy
610way for a process that is monitoring events via inotify
611to distinguish events that it triggers
612itself from those that are triggered by other processes.
4d2ddb4e 613
613836aa
MK
614Note that the event queue can overflow.
615In this case, events are lost.
09fa72fa 616Robust applications should handle the possibility of
613836aa
MK
617lost events gracefully.
618
619The inotify API identifies affected files by filename.
620However, by the time an application processes an inotify event,
621the filename may already have been deleted or renamed.
622
623If monitoring an entire directory subtree,
031de152
MK
624and a new subdirectory is created in that tree or an existing directory
625is renamed into that tree,
613836aa 626be aware that by the time you create a watch for the new subdirectory,
031de152 627new files (and subdirectories) may already exist inside the subdirectory.
613836aa 628Therefore, you may want to scan the contents of the subdirectory
031de152
MK
629immediately after adding the watch (and, if desired,
630recursively add watches for any subdirectories that it contains).
2f482041
MK
631
632The inotify applications identifies events via watch descriptors.
633It is the application's responsibility to cache a mapping
634(if one is needed) between watch descriptors and pathnames.
635Be aware that directory renamings may affect multiple cached pathnames.
47297adb 636.SH BUGS
a15ead5e
MK
637.\" FIXME kernel commit 611da04f7a31b2208e838be55a42c7a1310ae321
638.\" implies that unmount events were buggy 2.6.11 to 2.6.36
639.\"
ed7b0235
MK
640In kernels before 2.6.16, the
641.B IN_ONESHOT
c13182ef 642.I mask
ed7b0235 643flag does not work.
6f0ab035 644
7b5151b7
MK
645As originally designed and implemented, the
646.B IN_ONESHOT
647flag did not cause an
648.B IN_IGNORED
649event to be generated when the watch was dropped after one event.
650However, as an unintended effect of other changes,
651since Linux 2.6.36, an
652.B IN_IGNORED
653event is generated in this case.
654
6f0ab035 655Before kernel 2.6.25,
22129aa9 656.\" commit 1c17d18e3775485bf1e0ce79575eb637a94494a2
9ed6b517 657the kernel code that was intended to coalesce successive identical events
6f0ab035
MK
658(i.e., the two most recent events could potentially be coalesced
659if the older had not yet been read)
660instead checked if the most recent event could be coalesced with the
661.I oldest
662unread event.
47297adb 663.SH SEE ALSO
f0afb16a
MK
664.BR inotifywait (1),
665.BR inotifywatch (1),
4d2b74dd
MK
666.BR inotify_add_watch (2),
667.BR inotify_init (2),
43bb5faf 668.BR inotify_init1 (2),
4d2b74dd
MK
669.BR inotify_rm_watch (2),
670.BR read (2),
173fe7e7
DP
671.BR stat (2)
672
673.IR Documentation/filesystems/inotify.txt
674in the Linux kernel source tree