X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=blobdiff_plain;f=man%2Fsd_login_monitor_new.xml;h=b187ad0dbe9536d2e9adf4558849be97bd5d2f3e;hp=35cb6b368b28ab326210c9f645d37a0c1abbee55;hb=667c24a6a86a5a26a906b7477ae81dcf4c73e64e;hpb=f274ece0f76b5709408821e317e87aef76123db6 diff --git a/man/sd_login_monitor_new.xml b/man/sd_login_monitor_new.xml index 35cb6b368..b187ad0db 100644 --- a/man/sd_login_monitor_new.xml +++ b/man/sd_login_monitor_new.xml @@ -21,7 +21,7 @@ along with systemd; If not, see . --> - + sd_login_monitor_new @@ -47,6 +47,8 @@ sd_login_monitor_unref 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 @@ -76,6 +78,17 @@ sd_login_monitor* m + + int sd_login_monitor_get_events + sd_login_monitor* m + + + + int sd_login_monitor_get_timeout + sd_login_monitor* m + uint64_t* timeout_usec + + @@ -122,26 +135,78 @@ application defined event loop, based around poll2 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 + 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 application needs to reread the login state with a function like sd_get_seats3 or similar to determine what changed. + + sd_login_monitor_get_events() + will return the poll() mask to + wait for. This function will return a combination of + POLLIN, POLLOUT + and similar to fill into the + .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's 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 failure, these calls return - a negative errno-style error code. + a Unix file descriptor. On success + sd_login_monitor_get_events() + 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. @@ -151,10 +216,13 @@ Notes The sd_login_monitor_new(), - sd_login_monitor_unref(), sd_login_monitor_flush() and - sd_login_monitor_get_fd() interfaces - are available as shared library, which can be compiled - and linked to with the + sd_login_monitor_unref(), + sd_login_monitor_flush(), + 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 file. @@ -166,7 +234,9 @@ systemd1, sd-login3, - sd_get_seats3 + sd_get_seats3, + poll2, + clock_gettime2