X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=man%2Fsd_login_monitor_new.xml;h=909a3d9bfda5b220949ad56807f2128a17c2ffa2;hb=6c045c0b4c49c88a1d3b9360c05efa5084796d2d;hp=94428771a86687db8094861eb077be467fccea34;hpb=dace83cbd0c2212fc0e25d36d50711b19f14b1b6;p=elogind.git
diff --git a/man/sd_login_monitor_new.xml b/man/sd_login_monitor_new.xml
index 94428771a..909a3d9bf 100644
--- a/man/sd_login_monitor_new.xml
+++ b/man/sd_login_monitor_new.xml
@@ -48,8 +48,9 @@
sd_login_monitor_flush
sd_login_monitor_get_fd
sd_login_monitor_get_events
+ sd_login_monitor_get_timeout
sd_login_monitor
- Monitor login sessions, seats and users
+ Monitor login sessions, seats, users and virtual machines/containers
@@ -82,6 +83,12 @@
sd_login_monitor* m
+
+ int sd_login_monitor_get_timeout
+ sd_login_monitor* m
+ uint64_t* timeout_usec
+
+
@@ -89,23 +96,26 @@
Description
sd_login_monitor_new() may
- be used to monitor login sessions, users and seats. Via
- a monitor object a file descriptor can be integrated
- into an application defined event loop which is woken
- up each time a user logs in, logs out or a seat is
- added or removed, or a session, user, or seat changes
- state otherwise. The first parameter takes a string
- which can be seat (to get
+ be used to monitor login sessions, users, seats, and
+ virtual machines/containers. Via a monitor object a
+ file descriptor can be integrated into an application
+ defined event loop which is woken up each time a user
+ logs in, logs out or a seat is added or removed, or a
+ session, user, seat or virtual machine/container
+ changes state otherwise. The first parameter takes a
+ string which can be seat (to get
only notifications about seats being added, removed or
changed), session (to get only
notifications about sessions being created or removed
- or changed) or uid (to get only
+ or changed), uid (to get only
notifications when a user changes state in respect to
- logins). If notifications shall be generated in all
- these conditions, NULL may be passed. Note that in the
- future additional categories may be defined. The
- second parameter returns a monitor object and needs to
- be freed with the
+ logins) or machine (to get only
+ notifications when a virtual machine or container is
+ started or stopped). If notifications shall be
+ generated in all these conditions, NULL may be
+ passed. Note that in the future additional categories
+ may be defined. The second parameter returns a monitor
+ object and needs to be freed with the
sd_login_monitor_unref() call
after use.
@@ -119,7 +129,7 @@
object. Whenever an event causes the monitor to wake
up the event loop via the file descriptor this
function needs to be called to reset the wake-up
- state. If this call is not invoked the file descriptor
+ state. If this call is not invoked, the file descriptor
will immediately wake up the event loop again.
sd_login_monitor_get_fd()
@@ -130,7 +140,9 @@
or a similar interface. The application should include
the returned file descriptor as wake-up source for the
events mask returned by
- sd_login_monitor_get_events(). Whenever
+ sd_login_monitor_get_events(). It
+ should pass a timeout value as returned by
+ sd_login_monitor_get_timeout(). Whenever
a wake-up is triggered the file descriptor needs to be
reset via
sd_login_monitor_flush(). An
@@ -142,29 +154,65 @@
sd_login_monitor_get_events()
will return the poll() mask to
wait for. This function will return a combination of
- POLLIN, POLLOUT
+ POLLIN, POLLOUT
and similar to fill into the
- .events field of struct
- pollfd.
+ .events field of struct
+ pollfd.
+
+ sd_login_monitor_get_timeout()
+ will return a timeout value for usage in
+ poll(). This returns a value in
+ microseconds since the epoch of CLOCK_MONOTONIC
+ for timing out poll() in
+ timeout_usec. See
+ clock_gettime2
+ for details about
+ CLOCK_MONOTONIC. If there is no
+ timeout to wait for this will fill in
+ (uint64_t) -1 instead. Note that
+ poll() takes a relative timeout
+ in milliseconds rather than an absolute timeout in
+ microseconds. To convert the absolute 'us' timeout into
+ relative 'ms', use code like the following:
+
+ uint64_t t;
+int msec;
+sd_login_monitor_get_timeout(m, &t);
+if (t == (uint64_t) -1)
+ msec = -1;
+else {
+ struct timespec ts;
+ uint64_t n;
+ clock_getttime(CLOCK_MONOTONIC, &ts);
+ n = (uint64_t) ts.tv_sec * 1000000 + ts.tv_nsec / 1000;
+ msec = t > n ? (int) ((t - n + 999) / 1000) : 0;
+}
+
+ The code above does not do any error checking
+ for brevity's sake. The calculated msec
+ integer can be passed directly as
+ poll()'s timeout
+ parameter.
Return Value
On success
- sd_login_monitor_new() and
- sd_login_monitor_flush() return 0
- or a positive integer. On success
+ sd_login_monitor_new(),
+ sd_login_monitor_flush() and
+ sd_login_monitor_get_timeout()
+ return 0 or a positive integer. On success
sd_login_monitor_get_fd() returns
a Unix file descriptor. On success
sd_login_monitor_get_events()
- returns a combination of POLLIN,
- POLLOUT and suchlike. On failure,
+ returns a combination of POLLIN,
+ POLLOUT and suchlike. On failure,
these calls return a negative errno-style error
code.
sd_login_monitor_unref()
- always returns NULL.
+ always returns NULL.
@@ -173,12 +221,12 @@
The sd_login_monitor_new(),
sd_login_monitor_unref(),
sd_login_monitor_flush(),
- sd_login_monitor_get_fd() and
- sd_login_monitor_get_events()
+ sd_login_monitor_get_fd(),
+ sd_login_monitor_get_events() and
+ sd_login_monitor_get_timeout()
interfaces are available as shared library, which can
be compiled and linked to with the
- libsystemd-login
- pkg-config1
+ libsystemd-login pkg-config1
file.
@@ -189,7 +237,8 @@
systemd1,
sd-login3,
sd_get_seats3,
- poll2
+ poll2,
+ clock_gettime2