mirror of
https://github.com/systemd/systemd
synced 2024-10-14 20:17:52 +00: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/>.
|
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>
|
<refentryinfo>
|
||||||
<title>sd_journal_get_fd</title>
|
<title>sd_journal_get_fd</title>
|
||||||
|
@ -263,73 +263,13 @@ else {
|
||||||
<para>Iterating through the journal, in a live view tracking all
|
<para>Iterating through the journal, in a live view tracking all
|
||||||
changes:</para>
|
changes:</para>
|
||||||
|
|
||||||
<programlisting>#include <stdio.h>
|
<programlisting><xi:include href="journal-iterate-wait.c" parse="text" /></programlisting>
|
||||||
#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>
|
|
||||||
|
|
||||||
<para>Waiting with <function>poll()</function> (this
|
<para>Waiting with <function>poll()</function> (this
|
||||||
example lacks all error checking for the sake of
|
example lacks all error checking for the sake of
|
||||||
simplicity):</para>
|
simplicity):</para>
|
||||||
|
|
||||||
<programlisting>#include <poll.h>
|
<programlisting><xi:include href="journal-iterate-poll.c" parse="text" /></programlisting>
|
||||||
#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>
|
|
||||||
</refsect1>
|
</refsect1>
|
||||||
|
|
||||||
<refsect1>
|
<refsect1>
|
||||||
|
|
Loading…
Reference in a new issue