mirror of
https://github.com/systemd/systemd.git
synced 2024-11-24 10:43:35 +08:00
login: add new public API call sd_login_monitor_get_events() to get poll() flags to wait for
We should keep our options open, so that we can watch for POLLOUT later on if we wish to. CUrrently this call will always return POLLIN however.
This commit is contained in:
parent
ee531d949c
commit
dace83cbd0
@ -115,11 +115,11 @@
|
||||
below.</para>
|
||||
|
||||
<para><function>sd_journal_get_events()</function>
|
||||
will return the
|
||||
<citerefentry><refentrytitle>poll</refentrytitle><manvolnum>2</manvolnum></citerefentry>
|
||||
mask to wait for. This function will return a
|
||||
combination of POLLIN and POLLOUT and similar to fill
|
||||
into the <literal>.events</literal> field of
|
||||
will return the <function>poll()</function> mask to
|
||||
wait for. This function will return a combination of
|
||||
<literal>POLLIN</literal> and
|
||||
<literal>POLLOUT</literal> and similar to fill into
|
||||
the <literal>.events</literal> field of
|
||||
<literal>struct pollfd</literal>.</para>
|
||||
|
||||
<para><function>sd_journal_reliable_fd()</function>
|
||||
@ -134,7 +134,7 @@
|
||||
<function>sd_journal_get_fd()</function> are
|
||||
sufficient as only source for wake-ups.</para>
|
||||
|
||||
<para>After each <literal>poll()</literal> wake-up
|
||||
<para>After each <function>poll()</function> wake-up
|
||||
<function>sd_journal_process()</function> needs to be
|
||||
called to process events. This call will also indicate
|
||||
what kind of change has been detected (see below; note
|
||||
@ -169,9 +169,9 @@
|
||||
errno-style error code.</para>
|
||||
|
||||
<para><function>sd_journal_get_events()</function>
|
||||
returns a combination of POLLIN, POLLOUT and suchlike
|
||||
on success or a negative errno-style error
|
||||
code.</para>
|
||||
returns a combination of <literal>POLLIN</literal>,
|
||||
<literal>POLLOUT</literal> and suchlike on success or
|
||||
a negative errno-style error code.</para>
|
||||
|
||||
<para><function>sd_journal_reliable_fd()</function>
|
||||
returns a positive integer if the file descriptor
|
||||
|
@ -47,6 +47,7 @@
|
||||
<refname>sd_login_monitor_unref</refname>
|
||||
<refname>sd_login_monitor_flush</refname>
|
||||
<refname>sd_login_monitor_get_fd</refname>
|
||||
<refname>sd_login_monitor_get_events</refname>
|
||||
<refname>sd_login_monitor</refname>
|
||||
<refpurpose>Monitor login sessions, seats and users</refpurpose>
|
||||
</refnamediv>
|
||||
@ -76,6 +77,11 @@
|
||||
<paramdef>sd_login_monitor* <parameter>m</parameter></paramdef>
|
||||
</funcprototype>
|
||||
|
||||
<funcprototype>
|
||||
<funcdef>int <function>sd_login_monitor_get_events</function></funcdef>
|
||||
<paramdef>sd_login_monitor* <parameter>m</parameter></paramdef>
|
||||
</funcprototype>
|
||||
|
||||
</funcsynopsis>
|
||||
</refsynopsisdiv>
|
||||
|
||||
@ -122,14 +128,24 @@
|
||||
application defined event loop, based around
|
||||
<citerefentry><refentrytitle>poll</refentrytitle><manvolnum>2</manvolnum></citerefentry>
|
||||
or a similar interface. The application should include
|
||||
the returned file descriptor as wake up source for
|
||||
POLLIN events. Whenever a wake-up is triggered the
|
||||
file descriptor needs to be reset via
|
||||
the returned file descriptor as wake-up source for the
|
||||
events mask returned by
|
||||
<function>sd_login_monitor_get_events()</function>. Whenever
|
||||
a wake-up is triggered the file descriptor needs to be
|
||||
reset via
|
||||
<function>sd_login_monitor_flush()</function>. An
|
||||
application needs to reread the login state with a
|
||||
function like
|
||||
<citerefentry><refentrytitle>sd_get_seats</refentrytitle><manvolnum>3</manvolnum></citerefentry>
|
||||
or similar to determine what changed.</para>
|
||||
|
||||
<para><function>sd_login_monitor_get_events()</function>
|
||||
will return the <function>poll()</function> mask to
|
||||
wait for. This function will return a combination of
|
||||
<literal>POLLIN</literal>, <literal>POLLOUT</literal>
|
||||
and similar to fill into the
|
||||
<literal>.events</literal> field of <literal>struct
|
||||
pollfd</literal>.</para>
|
||||
</refsect1>
|
||||
|
||||
<refsect1>
|
||||
@ -140,8 +156,12 @@
|
||||
<function>sd_login_monitor_flush()</function> return 0
|
||||
or a positive integer. On success
|
||||
<function>sd_login_monitor_get_fd()</function> returns
|
||||
a Unix file descriptor. On failure, these calls return
|
||||
a negative errno-style error code.</para>
|
||||
a Unix file descriptor. On success
|
||||
<function>sd_login_monitor_get_events()</function>
|
||||
returns a combination of <literal>POLLIN</literal>,
|
||||
<literal>POLLOUT</literal> and suchlike. On failure,
|
||||
these calls return a negative errno-style error
|
||||
code.</para>
|
||||
|
||||
<para><function>sd_login_monitor_unref()</function>
|
||||
always returns NULL.</para>
|
||||
@ -151,10 +171,12 @@
|
||||
<title>Notes</title>
|
||||
|
||||
<para>The <function>sd_login_monitor_new()</function>,
|
||||
<function>sd_login_monitor_unref()</function>, <function>sd_login_monitor_flush()</function> and
|
||||
<function>sd_login_monitor_get_fd()</function> interfaces
|
||||
are available as shared library, which can be compiled
|
||||
and linked to with the
|
||||
<function>sd_login_monitor_unref()</function>,
|
||||
<function>sd_login_monitor_flush()</function>,
|
||||
<function>sd_login_monitor_get_fd()</function> and
|
||||
<function>sd_login_monitor_get_events()</function>
|
||||
interfaces are available as shared library, which can
|
||||
be compiled and linked to with the
|
||||
<literal>libsystemd-login</literal>
|
||||
<citerefentry><refentrytitle>pkg-config</refentrytitle><manvolnum>1</manvolnum></citerefentry>
|
||||
file.</para>
|
||||
@ -166,7 +188,8 @@
|
||||
<para>
|
||||
<citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
|
||||
<citerefentry><refentrytitle>sd-login</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
|
||||
<citerefentry><refentrytitle>sd_get_seats</refentrytitle><manvolnum>3</manvolnum></citerefentry>
|
||||
<citerefentry><refentrytitle>sd_get_seats</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
|
||||
<citerefentry><refentrytitle>poll</refentrytitle><manvolnum>2</manvolnum></citerefentry>
|
||||
</para>
|
||||
</refsect1>
|
||||
|
||||
|
@ -58,3 +58,8 @@ LIBSYSTEMD_LOGIN_198 {
|
||||
global:
|
||||
sd_session_get_tty;
|
||||
} LIBSYSTEMD_LOGIN_186;
|
||||
|
||||
LIBSYSTEMD_LOGIN_201 {
|
||||
global:
|
||||
sd_login_monitor_get_events;
|
||||
} LIBSYSTEMD_LOGIN_198;
|
||||
|
@ -23,6 +23,7 @@
|
||||
#include <string.h>
|
||||
#include <errno.h>
|
||||
#include <sys/inotify.h>
|
||||
#include <sys/poll.h>
|
||||
|
||||
#include "util.h"
|
||||
#include "cgroup-util.h"
|
||||
@ -797,3 +798,11 @@ _public_ int sd_login_monitor_get_fd(sd_login_monitor *m) {
|
||||
|
||||
return MONITOR_TO_FD(m);
|
||||
}
|
||||
|
||||
_public_ int sd_login_monitor_get_events(sd_login_monitor *m) {
|
||||
|
||||
if (!m)
|
||||
return -EINVAL;
|
||||
|
||||
return POLLIN;
|
||||
}
|
||||
|
@ -185,7 +185,7 @@ int main(int argc, char* argv[]) {
|
||||
|
||||
zero(pollfd);
|
||||
pollfd.fd = sd_login_monitor_get_fd(m);
|
||||
pollfd.events = POLLIN;
|
||||
pollfd.events = sd_login_monitor_get_events(m);
|
||||
|
||||
for (n = 0; n < 5; n++) {
|
||||
r = poll(&pollfd, 1, -1);
|
||||
|
@ -156,6 +156,9 @@ int sd_login_monitor_flush(sd_login_monitor *m);
|
||||
/* Get FD from monitor */
|
||||
int sd_login_monitor_get_fd(sd_login_monitor *m);
|
||||
|
||||
/* Get poll() mask to monitor */
|
||||
int sd_login_monitor_get_events(sd_login_monitor *m);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
Loading…
Reference in New Issue
Block a user