]> git.ipfire.org Git - thirdparty/systemd.git/blame - man/sd_event_add_inotify.xml
sd-event: introduce sd_event_source_get_inotify_path()
[thirdparty/systemd.git] / man / sd_event_add_inotify.xml
CommitLineData
514094f9 1<?xml version='1.0'?>
3a54a157 2<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
eea10b26 3 "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
db9ecf05 4<!-- SPDX-License-Identifier: LGPL-2.1-or-later -->
1eb54dc6
LP
5
6<refentry id="sd_event_add_inotify" xmlns:xi="http://www.w3.org/2001/XInclude">
7
8 <refentryinfo>
9 <title>sd_event_add_inotify</title>
10 <productname>systemd</productname>
11 </refentryinfo>
12
13 <refmeta>
14 <refentrytitle>sd_event_add_inotify</refentrytitle>
15 <manvolnum>3</manvolnum>
16 </refmeta>
17
18 <refnamediv>
19 <refname>sd_event_add_inotify</refname>
e67d738a 20 <refname>sd_event_add_inotify_fd</refname>
1eb54dc6 21 <refname>sd_event_source_get_inotify_mask</refname>
74c4231c 22 <refname>sd_event_source_get_inotify_path</refname>
1eb54dc6
LP
23 <refname>sd_event_inotify_handler_t</refname>
24
25 <refpurpose>Add an "inotify" file system inode event source to an event loop</refpurpose>
26 </refnamediv>
27
28 <refsynopsisdiv>
29 <funcsynopsis>
30 <funcsynopsisinfo>#include &lt;systemd/sd-event.h&gt;</funcsynopsisinfo>
31
32 <funcsynopsisinfo><token>typedef</token> struct sd_event_source sd_event_source;</funcsynopsisinfo>
33
34 <funcprototype>
35 <funcdef>typedef int (*<function>sd_event_inotify_handler_t</function>)</funcdef>
36 <paramdef>sd_event_source *<parameter>s</parameter></paramdef>
37 <paramdef>const struct inotify_event *<parameter>event</parameter></paramdef>
38 <paramdef>void *<parameter>userdata</parameter></paramdef>
39 </funcprototype>
40
41 <funcprototype>
42 <funcdef>int <function>sd_event_add_inotify</function></funcdef>
43 <paramdef>sd_event *<parameter>event</parameter></paramdef>
44 <paramdef>sd_event_source **<parameter>source</parameter></paramdef>
45 <paramdef>const char *<parameter>path</parameter></paramdef>
46 <paramdef>uint32_t <parameter>mask</parameter></paramdef>
47 <paramdef>sd_event_inotify_handler_t <parameter>handler</parameter></paramdef>
48 <paramdef>void *<parameter>userdata</parameter></paramdef>
49 </funcprototype>
50
e67d738a
LP
51 <funcprototype>
52 <funcdef>int <function>sd_event_add_inotify_fd</function></funcdef>
53 <paramdef>sd_event *<parameter>event</parameter></paramdef>
54 <paramdef>sd_event_source **<parameter>source</parameter></paramdef>
55 <paramdef>int <parameter>fd</parameter></paramdef>
56 <paramdef>uint32_t <parameter>mask</parameter></paramdef>
57 <paramdef>sd_event_inotify_handler_t <parameter>handler</parameter></paramdef>
58 <paramdef>void *<parameter>userdata</parameter></paramdef>
59 </funcprototype>
60
1eb54dc6
LP
61 <funcprototype>
62 <funcdef>int <function>sd_event_source_get_inotify_mask</function></funcdef>
63 <paramdef>sd_event_source *<parameter>source</parameter></paramdef>
c1ab4458 64 <paramdef>uint32_t *<parameter>ret</parameter></paramdef>
1eb54dc6
LP
65 </funcprototype>
66
74c4231c
YW
67 <funcprototype>
68 <funcdef>int <function>sd_event_source_get_inotify_path</function></funcdef>
69 <paramdef>sd_event_source *<parameter>source</parameter></paramdef>
70 <paramdef>char **<parameter>ret</parameter></paramdef>
71 </funcprototype>
72
1eb54dc6
LP
73 </funcsynopsis>
74 </refsynopsisdiv>
75
76 <refsect1>
77 <title>Description</title>
78
79 <para><function>sd_event_add_inotify()</function> adds a new <citerefentry
9809a788
ZJS
80 project='man-pages'><refentrytitle>inotify</refentrytitle><manvolnum>7</manvolnum></citerefentry> file
81 system inode event source to an event loop. The event loop object is specified in the
82 <parameter>event</parameter> parameter, the event source object is returned in the
83 <parameter>source</parameter> parameter. The <parameter>path</parameter> parameter specifies the path of
84 the file system inode to watch. The <parameter>mask</parameter> parameter specifies which types of inode
85 events to watch specifically. It must contain an OR-ed combination of <constant>IN_ACCESS</constant>,
86 <constant>IN_ATTRIB</constant>, <constant>IN_CLOSE_WRITE</constant>, … flags. See <citerefentry
87 project='man-pages'><refentrytitle>inotify</refentrytitle><manvolnum>7</manvolnum></citerefentry> for
1eb54dc6
LP
88 further information.</para>
89
9809a788 90 <para>The <parameter>handler</parameter> must reference a function to call when the inode changes or
7611946e 91 <constant>NULL</constant>. The handler function will be passed the <parameter>userdata</parameter> pointer,
9809a788
ZJS
92 which may be chosen freely by the caller. The handler also receives a pointer to a <structname>struct
93 inotify_event</structname> structure containing information about the inode event. The handler may return
94 negative to signal an error (see below), other return values are ignored. If
95 <parameter>handler</parameter> is <constant>NULL</constant>, a default handler that calls
96 <citerefentry><refentrytitle>sd_event_exit</refentrytitle><manvolnum>3</manvolnum></citerefentry> will be
97 used.</para>
98
e67d738a
LP
99 <para><function>sd_event_add_inotify_fd()</function> is identical to
100 <function>sd_event_add_inotify()</function>, except that it takes a file descriptor to an inode (possibly
9809a788
ZJS
101 an <constant>O_PATH</constant> one, but any other will do too) instead of a path in the file system.
102 </para>
e67d738a 103
1eb54dc6
LP
104 <para>If multiple event sources are installed for the same inode the backing inotify watch descriptor is
105 automatically shared. The mask parameter may contain any flag defined by the inotify API, with the exception of
106 <constant>IN_MASK_ADD</constant>.</para>
107
108 <para>The handler is enabled continuously (<constant>SD_EVENT_ON</constant>), but this may be changed with
9809a788
ZJS
109 <citerefentry><refentrytitle>sd_event_source_set_enabled</refentrytitle><manvolnum>3</manvolnum></citerefentry>.
110 Alternatively, the <constant>IN_ONESHOT</constant> mask flag may be used to request
111 <constant>SD_EVENT_ONESHOT</constant> mode. If the handler function returns a negative error code, it
112 will be disabled after the invocation, even if the <constant>SD_EVENT_ON</constant> mode was requested
113 before.</para>
1eb54dc6
LP
114
115 <para>As a special limitation the priority of inotify event sources may only be altered (see
116 <citerefentry><refentrytitle>sd_event_source_set_priority</refentrytitle><manvolnum>3</manvolnum></citerefentry>)
117 in the time between creation of the event source object with <function>sd_event_add_inotify()</function> and the
118 beginning of the next event loop iteration. Attempts of changing the priority any later will be refused. Consider
119 freeing and allocating a new inotify event source to change the priority at that point.</para>
120
121 <para>To destroy an event source object use
122 <citerefentry><refentrytitle>sd_event_source_unref</refentrytitle><manvolnum>3</manvolnum></citerefentry>, but note
123 that the event source is only removed from the event loop when all references to the event source are dropped. To
124 make sure an event source does not fire anymore, even when there's still a reference to it kept, consider disabling
125 it with
126 <citerefentry><refentrytitle>sd_event_source_set_enabled</refentrytitle><manvolnum>3</manvolnum></citerefentry>.</para>
127
b9350e70
LP
128 <para>If the second parameter of <function>sd_event_add_inotify()</function> is passed as
129 <constant>NULL</constant> no reference to the event source object is returned. In this case the event
130 source is considered "floating", and will be destroyed implicitly when the event loop itself is
131 destroyed.</para>
132
133 <para>If the <parameter>handler</parameter> parameter to <function>sd_event_add_inotify()</function> is
134 <constant>NULL</constant>, and the event source fires, this will be considered a request to exit the
135 event loop. In this case, the <parameter>userdata</parameter> parameter, cast to an integer, is passed as
136 the exit code parameter to
137 <citerefentry><refentrytitle>sd_event_exit</refentrytitle><manvolnum>3</manvolnum></citerefentry>.</para>
1eb54dc6
LP
138
139 <para><function>sd_event_source_get_inotify_mask()</function> retrieves the configured inotify watch mask of an
140 event source created previously with <function>sd_event_add_inotify()</function>. It takes the event source object
141 as the <parameter>source</parameter> parameter and a pointer to a <type>uint32_t</type> variable to return the mask
142 in.</para>
74c4231c
YW
143
144 <para><function>sd_event_source_get_inotify_path()</function> retrieves the target path of the configured
145 inotify watch of an event source created previously with <function>sd_event_add_inotify()</function>. It
146 takes the event source object as the <parameter>source</parameter> parameter and a pointer to a
147 <type>char **</type> variable to return the path in. The caller needs to free the returned path.</para>
1eb54dc6
LP
148 </refsect1>
149
150 <refsect1>
151 <title>Return Value</title>
152
153 <para>On success, these functions return 0 or a positive integer. On failure, they return a negative errno-style
154 error code.</para>
1eb54dc6 155
b1de39de
ZJS
156 <refsect2>
157 <title>Errors</title>
1eb54dc6 158
b1de39de 159 <para>Returned errors may indicate the following problems:</para>
1eb54dc6 160
b1de39de
ZJS
161 <variablelist>
162 <varlistentry>
163 <term><constant>-ENOMEM</constant></term>
1eb54dc6 164
b1de39de
ZJS
165 <listitem><para>Not enough memory to allocate an object.</para></listitem>
166 </varlistentry>
1eb54dc6 167
b1de39de
ZJS
168 <varlistentry>
169 <term><constant>-EINVAL</constant></term>
1eb54dc6 170
b1de39de
ZJS
171 <listitem><para>An invalid argument has been passed. This includes specifying a mask with
172 <constant>IN_MASK_ADD</constant> set.</para></listitem>
173 </varlistentry>
1eb54dc6 174
b1de39de
ZJS
175 <varlistentry>
176 <term><constant>-ESTALE</constant></term>
1eb54dc6 177
74c4231c
YW
178 <listitem>
179 <para>Returned by <function>sd_event_source_add_inotify()</function> or
180 <function>sd_event_source_add_inotify_fd()</function> when the event loop is already terminated.
181 Returned by <function>sd_event_source_get_inotify_path()</function> when no active inode data is
182 assigned to the event source, e.g. when the event source is disabled.</para>
183 </listitem>
1eb54dc6 184
b1de39de 185 </varlistentry>
1eb54dc6 186
b1de39de
ZJS
187 <varlistentry>
188 <term><constant>-ECHILD</constant></term>
1eb54dc6 189
2eeff0f4 190 <listitem><para>The event loop has been created in a different process, library or module instance.</para></listitem>
1eb54dc6 191
b1de39de 192 </varlistentry>
1eb54dc6 193
b1de39de
ZJS
194 <varlistentry>
195 <term><constant>-EDOM</constant></term>
1eb54dc6 196
b1de39de
ZJS
197 <listitem><para>The passed event source is not an inotify process event source.</para></listitem>
198 </varlistentry>
1eb54dc6 199
e67d738a
LP
200 <varlistentry>
201 <term><constant>-EBADF</constant></term>
202
fc6ec43c 203 <listitem><para>The passed file descriptor is not valid.</para></listitem>
ec07c3c8 204
e67d738a
LP
205 </varlistentry>
206
207 <varlistentry>
208 <term><constant>-ENOSYS</constant></term>
209
210 <listitem><para><function>sd_event_add_inotify_fd()</function> was called without
fc6ec43c 211 <filename>/proc/</filename> mounted.</para></listitem>
ec07c3c8 212
e67d738a
LP
213 </varlistentry>
214
b1de39de
ZJS
215 </variablelist>
216 </refsect2>
1eb54dc6
LP
217 </refsect1>
218
0e37c169
ZJS
219 <refsect1>
220 <title>Examples</title>
221
222 <example>
223 <title>A simple program that uses inotify to monitor one or two directories</title>
224
225 <programlisting><xi:include href="inotify-watch-tmp.c" parse="text" /></programlisting>
226 </example>
227 </refsect1>
228
1eb54dc6
LP
229 <xi:include href="libsystemd-pkgconfig.xml" />
230
69106f47
AK
231 <refsect1>
232 <title>History</title>
00f95506
AK
233 <para><function>sd_event_inotify_handler_t()</function>,
234 <function>sd_event_add_inotify()</function>, and
235 <function>sd_event_source_get_inotify_mask()</function> were added in version 239.</para>
69106f47 236 <para><function>sd_event_add_inotify_fd()</function> was added in version 250.</para>
74c4231c 237 <para><function>sd_event_source_get_inotify_path()</function> was added in version 256.</para>
69106f47
AK
238 </refsect1>
239
1eb54dc6
LP
240 <refsect1>
241 <title>See Also</title>
242
13a69c12
DT
243 <para><simplelist type="inline">
244 <member><citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry></member>
245 <member><citerefentry><refentrytitle>sd-event</refentrytitle><manvolnum>3</manvolnum></citerefentry></member>
246 <member><citerefentry><refentrytitle>sd_event_new</refentrytitle><manvolnum>3</manvolnum></citerefentry></member>
247 <member><citerefentry><refentrytitle>sd_event_now</refentrytitle><manvolnum>3</manvolnum></citerefentry></member>
248 <member><citerefentry><refentrytitle>sd_event_add_io</refentrytitle><manvolnum>3</manvolnum></citerefentry></member>
249 <member><citerefentry><refentrytitle>sd_event_add_time</refentrytitle><manvolnum>3</manvolnum></citerefentry></member>
250 <member><citerefentry><refentrytitle>sd_event_add_signal</refentrytitle><manvolnum>3</manvolnum></citerefentry></member>
251 <member><citerefentry><refentrytitle>sd_event_add_defer</refentrytitle><manvolnum>3</manvolnum></citerefentry></member>
252 <member><citerefentry><refentrytitle>sd_event_add_child</refentrytitle><manvolnum>3</manvolnum></citerefentry></member>
253 <member><citerefentry><refentrytitle>sd_event_source_set_enabled</refentrytitle><manvolnum>3</manvolnum></citerefentry></member>
254 <member><citerefentry><refentrytitle>sd_event_source_set_priority</refentrytitle><manvolnum>3</manvolnum></citerefentry></member>
255 <member><citerefentry><refentrytitle>sd_event_source_set_userdata</refentrytitle><manvolnum>3</manvolnum></citerefentry></member>
256 <member><citerefentry><refentrytitle>sd_event_source_set_description</refentrytitle><manvolnum>3</manvolnum></citerefentry></member>
257 <member><citerefentry><refentrytitle>sd_event_source_set_floating</refentrytitle><manvolnum>3</manvolnum></citerefentry></member>
258 <member><citerefentry project='man-pages'><refentrytitle>waitid</refentrytitle><manvolnum>2</manvolnum></citerefentry></member>
259 </simplelist></para>
1eb54dc6
LP
260 </refsect1>
261
262</refentry>