chiark / gitweb /
man: document sd_journal_next()
authorLennart Poettering <lennart@poettering.net>
Fri, 13 Jul 2012 16:28:08 +0000 (18:28 +0200)
committerLennart Poettering <lennart@poettering.net>
Fri, 13 Jul 2012 16:28:08 +0000 (18:28 +0200)
Makefile.am
man/sd_journal_next.xml [new file with mode: 0644]
man/sd_journal_open.xml
man/sd_journal_stream_fd.xml

index a7a1db7..119d968 100644 (file)
@@ -501,7 +501,8 @@ MANPAGES = \
        man/sd-journal.3 \
        man/sd_journal_print.3 \
        man/sd_journal_stream_fd.3 \
-       man/sd_journal_open.3
+       man/sd_journal_open.3 \
+       man/sd_journal_next.3
 
 MANPAGES_ALIAS = \
        man/reboot.8 \
@@ -543,7 +544,10 @@ MANPAGES_ALIAS = \
        man/sd_journal_send.3 \
        man/sd_journal_sendv.3 \
        man/sd_journal_open_directory.3 \
-       man/sd_journal_close.3
+       man/sd_journal_close.3 \
+       man/sd_journal_previous.3 \
+       man/sd_journal_next_skip.3 \
+       man/sd_journal_previous_skip.3
 
 man/reboot.8: man/halt.8
 man/poweroff.8: man/halt.8
@@ -585,6 +589,9 @@ man/sd_journal_send.3: man/sd_journal_print.3
 man/sd_journal_sendv.3: man/sd_journal_print.3
 man/sd_journal_open_directory.3: man/sd_journal_open.3
 man/sd_journal_close.3: man/sd_journal_open.3
+man/sd_journal_previous.3: man/sd_journal_next.3
+man/sd_journal_next_skip.3: man/sd_journal_next.3
+man/sd_journal_previous_skip.3: man/sd_journal_next.3
 
 XML_FILES = \
        ${patsubst %.1,%.xml,${patsubst %.3,%.xml,${patsubst %.5,%.xml,${patsubst %.7,%.xml,${patsubst %.8,%.xml,$(MANPAGES)}}}}}
diff --git a/man/sd_journal_next.xml b/man/sd_journal_next.xml
new file mode 100644 (file)
index 0000000..f55ee15
--- /dev/null
@@ -0,0 +1,194 @@
+<?xml version='1.0'?> <!--*-nxml-*-->
+<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
+        "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">
+
+<!--
+  This file is part of systemd.
+
+  Copyright 2012 Lennart Poettering
+
+  systemd is free software; you can redistribute it and/or modify it
+  under the terms of the GNU Lesser General Public License as published by
+  the Free Software Foundation; either version 2.1 of the License, or
+  (at your option) any later version.
+
+  systemd is distributed in the hope that it will be useful, but
+  WITHOUT ANY WARRANTY; without even the implied warranty of
+  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+  Lesser General Public License for more details.
+
+  You should have received a copy of the GNU Lesser General Public License
+  along with systemd; If not, see <http://www.gnu.org/licenses/>.
+-->
+
+<refentry id="sd_journal_next">
+
+        <refentryinfo>
+                <title>sd_journal_next</title>
+                <productname>systemd</productname>
+
+                <authorgroup>
+                        <author>
+                                <contrib>Developer</contrib>
+                                <firstname>Lennart</firstname>
+                                <surname>Poettering</surname>
+                                <email>lennart@poettering.net</email>
+                        </author>
+                </authorgroup>
+        </refentryinfo>
+
+        <refmeta>
+                <refentrytitle>sd_journal_next</refentrytitle>
+                <manvolnum>3</manvolnum>
+        </refmeta>
+
+        <refnamediv>
+                <refname>sd_journal_next</refname>
+                <refname>sd_journal_previous</refname>
+                <refname>sd_journal_next_skip</refname>
+                <refname>sd_journal_previous_skip</refname>
+                <refpurpose>Advance or set back the read pointer in the journal</refpurpose>
+        </refnamediv>
+
+        <refsynopsisdiv>
+                <funcsynopsis>
+                        <funcsynopsisinfo>#include &lt;systemd/sd-journal.h&gt;</funcsynopsisinfo>
+
+                        <funcprototype>
+                                <funcdef>int <function>sd_journal_next</function></funcdef>
+                                <paramdef>sd_journal* <parameter>j</parameter></paramdef>
+                        </funcprototype>
+
+                        <funcprototype>
+                                <funcdef>int <function>sd_journal_previous</function></funcdef>
+                                <paramdef>sd_journal* <parameter>j</parameter></paramdef>
+                        </funcprototype>
+
+                        <funcprototype>
+                                <funcdef>int <function>sd_journal_next_skip</function></funcdef>
+                                <paramdef>sd_journal* <parameter>j</parameter></paramdef>
+                                <paramdef>uint64_t <parameter>skip</parameter></paramdef>
+                        </funcprototype>
+
+                        <funcprototype>
+                                <funcdef>int <function>sd_journal_previous_skip</function></funcdef>
+                                <paramdef>sd_journal* <parameter>j</parameter></paramdef>
+                                <paramdef>uint64_t <parameter>skip</parameter></paramdef>
+                        </funcprototype>
+
+                </funcsynopsis>
+        </refsynopsisdiv>
+
+        <refsect1>
+                <title>Description</title>
+
+                <para><function>sd_journal_next()</function> advances
+                the read pointer into the journal by one entry. The
+                only argument taken is a journal context object as
+                allocated via
+                <citerefentry><refentrytitle>sd_journal_open</refentrytitle><manvolnum>3</manvolnum></citerefentry>. After
+                successful invocation the entry may be read with
+                functions such as
+                <citerefentry><refentrytitle>sd_journal_get_data</refentrytitle><manvolnum>3</manvolnum></citerefentry>.</para>
+
+                <para>Similar, <function>sd_journal_previous()</function> sets
+                the read pointer back one entry.</para>
+
+                <para><function>sd_journal_next_skip()</function> and
+                <function>sd_journal_previous_skip()</function>
+                advance/set back the read pointer by multiple entries
+                at once, as specified in the <varname>skip</varname>
+                parameter.</para>
+
+                <para>The journal is strictly ordered by reception
+                time, and hence advancing to the next entry guarantees
+                that the entry then pointing to is later in time than
+                then previous one, or has the same timestamp.</para>
+
+                <para>Note that the
+                <function>SD_JOURNAL_FOREACH()</function> macro may be used
+                as a wrapper around
+                <citerefentry><refentrytitle>sd_journal_seek_head</refentrytitle><manvolnum>3</manvolnum></citerefentry>
+                and <function>sd_journal_next()</function> in order to
+                make iteratring through the journal easier. See below
+                for an example. Similar,
+                <function>SD_JOURNAL_FOREACH_BACKWARDS()</function>
+                may be used for iterating the journal in reverse
+                order.</para>
+        </refsect1>
+
+        <refsect1>
+                <title>Return Value</title>
+
+                <para>The four calls return the number of entries
+                advanced/set back on success or a negative errno-style
+                error code. When the end (resp. beginning) of the journal
+                is reached a number smaller than requested is
+                returned. More specifically, if
+                <function>sd_journal_next()</function> or
+                <function>sd_journal_previous()</function> reach the
+                end/beginning of the journal they will return 0,
+                instead of 1 when they are successful. This should be
+                considered an EOF marker.</para>
+        </refsect1>
+
+        <refsect1>
+                <title>Notes</title>
+
+                <para>The <function>sd_journal_next()</function>, <function>sd_journal_previous()</function>,
+                <function>sd_journal_next_skip()</function> and
+                <function>sd_journal_previous_skip()</function> interfaces are
+                available as shared library, which can be compiled and
+                linked to with the
+                <literal>libsystemd-journal</literal>
+                <citerefentry><refentrytitle>pkg-config</refentrytitle><manvolnum>1</manvolnum></citerefentry>
+                file.</para>
+        </refsect1>
+
+        <refsect1>
+                <title>Examples</title>
+
+                <para>Iterating through the journal:</para>
+
+                <programlisting>#include &lt;stdio.h&gt;
+#include &lt;string.h&gt;
+#include &lt;systemd/sd-journal.h&gt;
+
+int main(int argc, char *argv[]) {
+        int r;
+        sd_journal *j;
+        r = sd_journal_open(&amp;j, SD_JOURNAL_LOCAL_ONLY);
+        if (r &lt; 0) {
+                fprintf(stderr, "Failed to open journal: %s\n", strerror(-r));
+                return 1;
+        }
+        SD_JOURNAL_FOREACH(j) {
+                const char *d;
+                size_t l;
+
+                r = sd_journal_get_data(j, "MESSAGE", &amp;d, &amp;l);
+                if (r &lt; 0) {
+                        fprintf(stderr, "Failed to read message field: %s\n", strerror(-r));
+                        continue;
+                }
+
+                printf("%.*s\n", (int) l, d);
+        }
+        sd_journal_close(j);
+        return 0;
+}</programlisting>
+
+        </refsect1>
+
+        <refsect1>
+                <title>See Also</title>
+
+                <para>
+                        <citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
+                        <citerefentry><refentrytitle>sd-journal</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
+                        <citerefentry><refentrytitle>sd_journal_open</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
+                        <citerefentry><refentrytitle>sd_journal_get_data</refentrytitle><manvolnum>3</manvolnum></citerefentry>
+                </para>
+        </refsect1>
+
+</refentry>
index eb0b8c5..12b8055 100644 (file)
@@ -89,7 +89,7 @@
                 be opened. <literal>SD_JOURNAL_RUNTIME_ONLY</literal>
                 makes sure only volatile journal files will be opened,
                 excluding those which are stored on persistant
-                storage. <literal>SD_JOURNAL_RUNTIME_ONLY</literal>
+                storage. <literal>SD_JOURNAL_SYSTEM_ONLY</literal>
                 will ensure that only journal files of system services
                 and the kernel (in opposition to user session processes) will
                 be opened.</para>
                 accessible to the calling user will be opened. If
                 journal files are not accessible to the caller this
                 will be silently ignored.</para>
+
+                <para>See
+                <citerefentry><refentrytitle>sd_journal_next</refentrytitle><manvolnum>3</manvolnum></citerefentry>
+                for an example how to iterate through the journal
+                after opening it it with
+                <function>sd_journal_open()</function>.</para>
         </refsect1>
 
         <refsect1>
index 3d2ed1d..917ab4f 100644 (file)
 
                 <programlisting>#include &lt;syslog.h&gt;
 #include &lt;stdio.h&gt;
+#include &lt;string.h&gt;
+#include &lt;unistd.h&gt;
 #include &lt;systemd/sd-journal.h&gt;
 #include &lt;systemd/sd-daemon.h&gt;