mirror of
https://github.com/systemd/systemd-stable.git
synced 2025-01-08 21:17:47 +03:00
man: move examples out of sd_journal_get_fd into separate files
man/.dir-locals is to keep indentation under control. This makes it much easier to compile and run those examples, c.f. #7578. v2: - copy more of .dir-locals.el from the root to man/.dir-locals.el (I though emacs would inherit from the one in the parent dir, but it seems it just uses its own broken defaults, including indent-tabs-mode by default.)
This commit is contained in:
parent
bc96c63c05
commit
929f52632b
14
man/.dir-locals.el
Normal file
14
man/.dir-locals.el
Normal file
@ -0,0 +1,14 @@
|
||||
; special .c mode with reduced indentation for man pages
|
||||
((nil . ((indent-tabs-mode . nil)
|
||||
(tab-width . 8)
|
||||
(fill-column . 79)))
|
||||
(c-mode . ((fill-column . 80)
|
||||
(c-basic-offset . 2)
|
||||
(eval . (c-set-offset 'substatement-open 0))
|
||||
(eval . (c-set-offset 'statement-case-open 0))
|
||||
(eval . (c-set-offset 'case-label 0))
|
||||
(eval . (c-set-offset 'arglist-intro '++))
|
||||
(eval . (c-set-offset 'arglist-close 0))))
|
||||
(nxml-mode . ((nxml-child-indent . 2)
|
||||
(fill-column . 119)))
|
||||
(meson-mode . ((meson-indent-basic . 8))))
|
23
man/journal-iterate-poll.c
Normal file
23
man/journal-iterate-poll.c
Normal file
@ -0,0 +1,23 @@
|
||||
#include <poll.h>
|
||||
#include <systemd/sd-journal.h>
|
||||
|
||||
int wait_for_changes(sd_journal *j) {
|
||||
struct pollfd pollfd;
|
||||
int msec;
|
||||
|
||||
sd_journal_get_timeout(m, &t);
|
||||
if (t == (uint64_t) -1)
|
||||
msec = -1;
|
||||
else {
|
||||
struct timespec ts;
|
||||
uint64_t n;
|
||||
clock_gettime(CLOCK_MONOTONIC, &ts);
|
||||
n = (uint64_t) ts.tv_sec * 1000000 + ts.tv_nsec / 1000;
|
||||
msec = t > n ? (int) ((t - n + 999) / 1000) : 0;
|
||||
}
|
||||
|
||||
pollfd.fd = sd_journal_get_fd(j);
|
||||
pollfd.events = sd_journal_get_events(j);
|
||||
poll(&pollfd, 1, msec);
|
||||
return sd_journal_process(j);
|
||||
}
|
39
man/journal-iterate-wait.c
Normal file
39
man/journal-iterate-wait.c
Normal file
@ -0,0 +1,39 @@
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <systemd/sd-journal.h>
|
||||
|
||||
int main(int argc, char *argv[]) {
|
||||
int r;
|
||||
sd_journal *j;
|
||||
r = sd_journal_open(&j, SD_JOURNAL_LOCAL_ONLY);
|
||||
if (r < 0) {
|
||||
fprintf(stderr, "Failed to open journal: %s\n", strerror(-r));
|
||||
return 1;
|
||||
}
|
||||
for (;;) {
|
||||
const void *d;
|
||||
size_t l;
|
||||
r = sd_journal_next(j);
|
||||
if (r < 0) {
|
||||
fprintf(stderr, "Failed to iterate to next entry: %s\n", strerror(-r));
|
||||
break;
|
||||
}
|
||||
if (r == 0) {
|
||||
/* Reached the end, let's wait for changes, and try again */
|
||||
r = sd_journal_wait(j, (uint64_t) -1);
|
||||
if (r < 0) {
|
||||
fprintf(stderr, "Failed to wait for changes: %s\n", strerror(-r));
|
||||
break;
|
||||
}
|
||||
continue;
|
||||
}
|
||||
r = sd_journal_get_data(j, "MESSAGE", &d, &l);
|
||||
if (r < 0) {
|
||||
fprintf(stderr, "Failed to read message field: %s\n", strerror(-r));
|
||||
continue;
|
||||
}
|
||||
printf("%.*s\n", (int) l, (const char*) d);
|
||||
}
|
||||
sd_journal_close(j);
|
||||
return 0;
|
||||
}
|
@ -23,7 +23,7 @@
|
||||
along with systemd; If not, see <http://www.gnu.org/licenses/>.
|
||||
-->
|
||||
|
||||
<refentry id="sd_journal_get_fd">
|
||||
<refentry id="sd_journal_get_fd" xmlns:xi="http://www.w3.org/2001/XInclude">
|
||||
|
||||
<refentryinfo>
|
||||
<title>sd_journal_get_fd</title>
|
||||
@ -263,73 +263,13 @@ else {
|
||||
<para>Iterating through the journal, in a live view tracking all
|
||||
changes:</para>
|
||||
|
||||
<programlisting>#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <systemd/sd-journal.h>
|
||||
|
||||
int main(int argc, char *argv[]) {
|
||||
int r;
|
||||
sd_journal *j;
|
||||
r = sd_journal_open(&j, SD_JOURNAL_LOCAL_ONLY);
|
||||
if (r < 0) {
|
||||
fprintf(stderr, "Failed to open journal: %s\n", strerror(-r));
|
||||
return 1;
|
||||
}
|
||||
for (;;) {
|
||||
const void *d;
|
||||
size_t l;
|
||||
r = sd_journal_next(j);
|
||||
if (r < 0) {
|
||||
fprintf(stderr, "Failed to iterate to next entry: %s\n", strerror(-r));
|
||||
break;
|
||||
}
|
||||
if (r == 0) {
|
||||
/* Reached the end, let's wait for changes, and try again */
|
||||
r = sd_journal_wait(j, (uint64_t) -1);
|
||||
if (r < 0) {
|
||||
fprintf(stderr, "Failed to wait for changes: %s\n", strerror(-r));
|
||||
break;
|
||||
}
|
||||
continue;
|
||||
}
|
||||
r = sd_journal_get_data(j, "MESSAGE", &d, &l);
|
||||
if (r < 0) {
|
||||
fprintf(stderr, "Failed to read message field: %s\n", strerror(-r));
|
||||
continue;
|
||||
}
|
||||
printf("%.*s\n", (int) l, (const char*) d);
|
||||
}
|
||||
sd_journal_close(j);
|
||||
return 0;
|
||||
}</programlisting>
|
||||
<programlisting><xi:include href="journal-iterate-wait.c" parse="text" /></programlisting>
|
||||
|
||||
<para>Waiting with <function>poll()</function> (this
|
||||
example lacks all error checking for the sake of
|
||||
simplicity):</para>
|
||||
|
||||
<programlisting>#include <poll.h>
|
||||
#include <systemd/sd-journal.h>
|
||||
|
||||
int wait_for_changes(sd_journal *j) {
|
||||
struct pollfd pollfd;
|
||||
int msec;
|
||||
|
||||
sd_journal_get_timeout(m, &t);
|
||||
if (t == (uint64_t) -1)
|
||||
msec = -1;
|
||||
else {
|
||||
struct timespec ts;
|
||||
uint64_t n;
|
||||
clock_gettime(CLOCK_MONOTONIC, &ts);
|
||||
n = (uint64_t) ts.tv_sec * 1000000 + ts.tv_nsec / 1000;
|
||||
msec = t > n ? (int) ((t - n + 999) / 1000) : 0;
|
||||
}
|
||||
|
||||
pollfd.fd = sd_journal_get_fd(j);
|
||||
pollfd.events = sd_journal_get_events(j);
|
||||
poll(&pollfd, 1, msec);
|
||||
return sd_journal_process(j);
|
||||
}</programlisting>
|
||||
<programlisting><xi:include href="journal-iterate-poll.c" parse="text" /></programlisting>
|
||||
</refsect1>
|
||||
|
||||
<refsect1>
|
||||
|
Loading…
Reference in New Issue
Block a user