]> git.ipfire.org Git - thirdparty/systemd.git/blame - man/sd_event_wait.xml
po: update French translation
[thirdparty/systemd.git] / man / sd_event_wait.xml
CommitLineData
42f1ab50
ZJS
1<?xml version='1.0'?> <!--*- Mode: nxml; nxml-child-indent: 2; indent-tabs-mode: nil -*-->
2<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
12b42c76 3"http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">
42f1ab50
ZJS
4
5<!--
572eb058
ZJS
6 SPDX-License-Identifier: LGPL-2.1+
7
42f1ab50
ZJS
8 This file is part of systemd.
9
10 Copyright 2015 Zbigniew Jędrzejewski-Szmek
42f1ab50
ZJS
11-->
12
dc83f27a 13<refentry id="sd_event_wait" xmlns:xi="http://www.w3.org/2001/XInclude">
42f1ab50
ZJS
14
15 <refentryinfo>
16 <title>sd_event_wait</title>
17 <productname>systemd</productname>
18
19 <authorgroup>
20 <author>
21 <contrib>Developer</contrib>
22 <firstname>Tom</firstname>
23 <surname>Gundersen</surname>
24 <email>teg@jklm.no</email>
25 </author>
26 </authorgroup>
27 </refentryinfo>
28
29 <refmeta>
30 <refentrytitle>sd_event_wait</refentrytitle>
31 <manvolnum>3</manvolnum>
32 </refmeta>
33
34 <refnamediv>
35 <refname>sd_event_wait</refname>
36 <refname>sd_event_prepare</refname>
37 <refname>sd_event_dispatch</refname>
dc83f27a 38 <refname>sd_event_get_state</refname>
60a3b1e1 39 <refname>sd_event_get_iteration</refname>
dc83f27a
LP
40 <refname>SD_EVENT_INITIAL</refname>
41 <refname>SD_EVENT_PREPARING</refname>
42 <refname>SD_EVENT_ARMED</refname>
43 <refname>SD_EVENT_PENDING</refname>
44 <refname>SD_EVENT_RUNNING</refname>
45 <refname>SD_EVENT_EXITING</refname>
46 <refname>SD_EVENT_FINISHED</refname>
47
48 <refpurpose>Low-level event loop operations</refpurpose>
42f1ab50
ZJS
49 </refnamediv>
50
51 <refsynopsisdiv>
52 <funcsynopsis>
53 <funcsynopsisinfo>#include &lt;systemd/sd-event.h&gt;</funcsynopsisinfo>
54
dc83f27a
LP
55 <funcsynopsisinfo><token>enum</token> {
56 <constant>SD_EVENT_INITIAL</constant>,
57 <constant>SD_EVENT_PREPARING</constant>,
58 <constant>SD_EVENT_ARMED</constant>,
59 <constant>SD_EVENT_PENDING</constant>,
60 <constant>SD_EVENT_RUNNING</constant>,
61 <constant>SD_EVENT_EXITING</constant>,
62 <constant>SD_EVENT_FINISHED</constant>,
63};</funcsynopsisinfo>
64
42f1ab50
ZJS
65 <funcprototype>
66 <funcdef>int <function>sd_event_prepare</function></funcdef>
67 <paramdef>sd_event *<parameter>event</parameter></paramdef>
68 </funcprototype>
69
70 <funcprototype>
71 <funcdef>int <function>sd_event_wait</function></funcdef>
72 <paramdef>sd_event *<parameter>event</parameter></paramdef>
dc83f27a 73 <paramdef>uint64_t <parameter>usec</parameter></paramdef>
42f1ab50
ZJS
74 </funcprototype>
75
76 <funcprototype>
77 <funcdef>int <function>sd_event_dispatch</function></funcdef>
78 <paramdef>sd_event *<parameter>event</parameter></paramdef>
79 </funcprototype>
80
dc83f27a
LP
81 <funcprototype>
82 <funcdef>int <function>sd_event_get_state</function></funcdef>
83 <paramdef>sd_event *<parameter>event</parameter></paramdef>
84 </funcprototype>
85
60a3b1e1
LP
86 <funcprototype>
87 <funcdef>int <function>sd_event_get_iteration</function></funcdef>
88 <paramdef>sd_event *<parameter>event</parameter></paramdef>
89 <paramdef>uint64_t *<parameter>ret</parameter></paramdef>
90 </funcprototype>
91
42f1ab50
ZJS
92 </funcsynopsis>
93 </refsynopsisdiv>
94
95 <refsect1>
96 <title>Description</title>
97
dc83f27a
LP
98 <para>The low-level <function>sd_event_prepare()</function>,
99 <function>sd_event_wait()</function> and
100 <function>sd_event_dispatch()</function> functions may be used to
101 execute specific phases of an event loop. See
102 <citerefentry><refentrytitle>sd_event_run</refentrytitle><manvolnum>3</manvolnum></citerefentry>
103 and
104 <citerefentry><refentrytitle>sd_event_loop</refentrytitle><manvolnum>3</manvolnum></citerefentry>
105 for higher-level functions that execute individual but complete
7f3fdb7f 106 iterations of an event loop or run it continuously.</para>
dc83f27a
LP
107
108 <para><function>sd_event_prepare()</function> checks for pending
42f1ab50 109 events and arms necessary timers. If any events are ready to be
dc83f27a
LP
110 processed ("pending"), it returns a positive, non-zero value, and the caller
111 should process these events with
112 <function>sd_event_dispatch()</function>.</para>
113
114 <para><function>sd_event_dispatch()</function> dispatches the
115 highest priority event source that has a pending event. On
116 success, <function>sd_event_dispatch()</function> returns either
117 zero, which indicates that no further event sources may be
118 dispatched and exiting of the event loop was requested via
119 <citerefentry><refentrytitle>sd_event_exit</refentrytitle><manvolnum>3</manvolnum></citerefentry>;
120 or a positive non-zero value, which means that an event source was
121 dispatched and the loop returned to its initial state, and the
122 caller should initiate the next event loop iteration by invoking
123 <function>sd_event_prepare()</function> again.</para>
124
125 <para>In case <function>sd_event_prepare()</function> returned
126 zero, <function>sd_event_wait()</function> should be called to
127 wait for further events or a timeout. If any events are ready to
128 be processed, it returns a positive, non-zero value, and the
129 events should be dispatched with
130 <function>sd_event_dispatch()</function>. Otherwise, the event
131 loop returned to its initial state and the next event loop
132 iteration should be initiated by invoking
133 <function>sd_event_prepare()</function> again.</para>
134
135 <para><function>sd_event_get_state()</function> may be used to
136 determine the state the event loop is currently in. It returns one
137 of the states described below.</para>
138
60a3b1e1
LP
139 <para><function>sd_event_get_iteration()</function> may be used to determine the current iteration of the event
140 loop. It returns an unsigned 64bit integer containing a counter that increases monotonically with each iteration of
141 the event loop, starting with 0. The counter is increased at the time of the
142 <function>sd_event_prepare()</function> invocation.</para>
143
144 <para>All five functions take, as the first argument, the event loop object <parameter>event</parameter> that has
145 been created with <function>sd_event_new()</function>. The timeout for <function>sd_event_wait()</function> is
146 specified in <parameter>usec</parameter> in microseconds. <constant>(uint64_t) -1</constant> may be used to
147 specify an infinite timeout.</para>
dc83f27a
LP
148</refsect1>
149
150 <refsect1>
151 <title>State Machine</title>
152
153 <para>The event loop knows the following states, that may be
154 queried with <function>sd_event_get_state()</function>.</para>
42f1ab50 155
dc83f27a
LP
156 <variablelist>
157 <varlistentry>
158 <term><constant>SD_EVENT_INITIAL</constant></term>
159
160 <listitem><para>The initial state the event loop is in,
161 before each event loop iteration. Use
162 <function>sd_event_prepare()</function> to transition the
163 event loop into the <constant>SD_EVENT_ARMED</constant> or
164 <constant>SD_EVENT_PENDING</constant> states.</para></listitem>
165 </varlistentry>
166
167 <varlistentry>
168 <term><constant>SD_EVENT_PREPARING</constant></term>
169
170 <listitem><para>An event source is currently being prepared,
7f3fdb7f 171 i.e. the preparation handler is currently being executed, as
dc83f27a
LP
172 set with
173 <citerefentry><refentrytitle>sd_event_set_prepare</refentrytitle><manvolnum>3</manvolnum></citerefentry>. This
174 state is only seen in the event source preparation handler
175 that is invoked from the
176 <function>sd_event_prepare()</function> call and is
177 immediately followed by <constant>SD_EVENT_ARMED</constant> or
178 <constant>SD_EVENT_PENDING</constant>.</para></listitem>
179 </varlistentry>
180
181 <varlistentry>
182 <term><constant>SD_EVENT_ARMED</constant></term>
183
184 <listitem><para><function>sd_event_prepare()</function> has
185 been called and no event sources were ready to be
186 dispatched. Use <function>sd_event_wait()</function> to wait
187 for new events, and transition into
188 <constant>SD_EVENT_PENDING</constant> or back into
189 <constant>SD_EVENT_INITIAL</constant>.</para></listitem>
190 </varlistentry>
191
192 <varlistentry>
193 <term><constant>SD_EVENT_PENDING</constant></term>
194
195 <listitem><para><function>sd_event_prepare()</function> or
196 <function>sd_event_wait()</function> have been called and
197 there were event sources with events pending. Use
198 <function>sd_event_dispatch()</function> to dispatch the
199 highest priority event source and transition back to
200 <constant>SD_EVENT_INITIAL</constant>, or
201 <constant>SD_EVENT_FINISHED</constant>.</para></listitem>
202 </varlistentry>
203
204 <varlistentry>
205 <term><constant>SD_EVENT_RUNNING</constant></term>
206
207 <listitem><para>A regular event source is currently being
208 dispatched. This state is only seen in the event source
209 handler that is invoked from the
210 <function>sd_event_dispatch()</function> call, and is
211 immediately followed by <constant>SD_EVENT_INITIAL</constant>
212 or <constant>SD_EVENT_FINISHED</constant> as soon the event
213 source handler returns. Note that during dispatching of exit
214 event sources the <constant>SD_EVENT_EXITING</constant> state
215 is seen instead.</para></listitem>
216 </varlistentry>
217
218 <varlistentry>
219 <term><constant>SD_EVENT_EXITING</constant></term>
220
221 <listitem><para>Similar to
222 <constant>SD_EVENT_RUNNING</constant> but is the state in
223 effect while dispatching exit event sources. It is followed by
224 <constant>SD_EVENT_INITIAL</constant> or
225 <constant>SD_EVENT_FINISHED</constant> as soon as the event
226 handler returns.</para></listitem>
227 </varlistentry>
228
229 <varlistentry>
230 <term><constant>SD_EVENT_FINISHED</constant></term>
231
232 <listitem><para>The event loop has exited. All exit event
233 sources have run. If the event loop is in this state it serves
234 no purpose anymore, and should be freed.</para></listitem>
235 </varlistentry>
236
237 </variablelist>
238
239 <para>A simplified flow chart of the states and the calls to
240 transition between them is shown below. Note that
241 <constant>SD_EVENT_PREPARING</constant>,
242 <constant>SD_EVENT_RUNNING</constant> and
243 <constant>SD_EVENT_EXITING</constant> are not shown here.</para>
42f1ab50
ZJS
244
245 <programlisting>
dc83f27a
LP
246 INITIAL -&lt;---&lt;---&lt;---&lt;---&lt;---&lt;---&lt;---&lt;---&lt;---&lt;---&lt;---&lt;---\
247 | |
248 | ^
249 | |
250 v ret == 0 |
251 sd_event_prepare() &gt;---&gt;---&gt;---&gt;---&gt;- ARMED |
252 | | ^
253 | ret > 0 | |
254 | | |
255 v v ret == 0 |
256 PENDING &lt;---&lt;---&lt;---&lt;---&lt;---&lt; sd_event_wait() &gt;---&gt;---&gt;--+
257 | ret > 0 ^
258 | |
259 | |
260 v |
261 sd_event_dispatch() &gt;---&gt;---&gt;---&gt;---&gt;---&gt;---&gt;---&gt;---&gt;---&gt;---&gt;/
262 | ret > 0
263 | ret == 0
264 |
265 v
266 FINISHED
42f1ab50 267 </programlisting>
42f1ab50
ZJS
268 </refsect1>
269
270 <refsect1>
271 <title>Return Value</title>
272
273 <para>On success, these functions return 0 or a positive integer.
274 On failure, they return a negative errno-style error code. In case
dc83f27a
LP
275 of <function>sd_event_prepare()</function> and
276 <function>sd_event_wait()</function>, a positive, non-zero return
277 code indicates that events are ready to be processed and zero
278 indicates that no events are ready. In case of
279 <function>sd_event_dispatch()</function>, a positive, non-zero
280 return code indicates that the event loop returned to its initial
281 state and zero indicates the event loop has
282 exited. <function>sd_event_get_state()</function> returns a
283 positive or zero state on success.</para>
42f1ab50
ZJS
284 </refsect1>
285
286 <refsect1>
287 <title>Errors</title>
288
289 <para>Returned errors may indicate the following problems:</para>
290
291 <variablelist>
292 <varlistentry>
293 <term><constant>-EINVAL</constant></term>
294
a8eaaee7 295 <listitem><para>The <parameter>event</parameter> parameter is
dc83f27a 296 invalid or <constant>NULL</constant>.</para></listitem>
42f1ab50
ZJS
297 </varlistentry>
298
299 <varlistentry>
300 <term><constant>-EBUSY</constant></term>
301
302 <listitem><para>The event loop object is not in the right
303 state.</para></listitem>
304 </varlistentry>
305
306 <varlistentry>
307 <term><constant>-ESTALE</constant></term>
308
309 <listitem><para>The event loop is already terminated.</para></listitem>
310
311 </varlistentry>
312
313 <varlistentry>
314 <term><constant>-ECHILD</constant></term>
315
316 <listitem><para>The event loop has been created in a different process.</para></listitem>
317
318 </varlistentry>
319
320 </variablelist>
321
b938cb90 322 <para>Other errors are possible, too.</para>
42f1ab50
ZJS
323 </refsect1>
324
dc83f27a 325 <xi:include href="libsystemd-pkgconfig.xml" />
42f1ab50
ZJS
326
327 <refsect1>
328 <title>See Also</title>
329
330 <para>
331 <citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
332 <citerefentry><refentrytitle>sd_event_new</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
42f1ab50
ZJS
333 <citerefentry><refentrytitle>sd_event_add_io</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
334 <citerefentry><refentrytitle>sd_event_add_time</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
335 <citerefentry><refentrytitle>sd_event_add_signal</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
336 <citerefentry><refentrytitle>sd_event_add_defer</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
337 <citerefentry><refentrytitle>sd_event_add_exit</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
dc83f27a
LP
338 <citerefentry><refentrytitle>sd_event_add_post</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
339 <citerefentry><refentrytitle>sd_event_run</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
340 <citerefentry><refentrytitle>sd_event_get_fd</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
341 <citerefentry><refentrytitle>sd_event_source_set_prepare</refentrytitle><manvolnum>3</manvolnum></citerefentry>
42f1ab50
ZJS
342 </para>
343 </refsect1>
344
345</refentry>