2012-10-18 20:48:45 +04:00
<?xml version='1.0'?> <!-- * - nxml - * -->
2019-03-14 16:40:58 +03:00
< !DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
2015-06-18 20:47:44 +03:00
"http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">
2019-03-14 16:29:37 +03:00
<!-- SPDX - License - Identifier: LGPL - 2.1+ -->
2012-10-18 20:48:45 +04:00
2018-06-06 12:59:04 +03:00
<refentry id= "sd_journal_query_unique" xmlns:xi= "http://www.w3.org/2001/XInclude" >
2012-10-18 20:48:45 +04:00
2015-02-04 05:14:13 +03:00
<refentryinfo >
<title > sd_journal_query_unique</title>
<productname > systemd</productname>
</refentryinfo>
<refmeta >
<refentrytitle > sd_journal_query_unique</refentrytitle>
<manvolnum > 3</manvolnum>
</refmeta>
<refnamediv >
<refname > sd_journal_query_unique</refname>
<refname > sd_journal_enumerate_unique</refname>
<refname > sd_journal_restart_unique</refname>
<refname > SD_JOURNAL_FOREACH_UNIQUE</refname>
<refpurpose > Read unique data fields from the journal</refpurpose>
</refnamediv>
<refsynopsisdiv >
<funcsynopsis >
<funcsynopsisinfo > #include < systemd/sd-journal.h> </funcsynopsisinfo>
<funcprototype >
<funcdef > int <function > sd_journal_query_unique</function> </funcdef>
<paramdef > sd_journal *<parameter > j</parameter> </paramdef>
<paramdef > const char *<parameter > field</parameter> </paramdef>
</funcprototype>
<funcprototype >
<funcdef > int <function > sd_journal_enumerate_unique</function> </funcdef>
<paramdef > sd_journal *<parameter > j</parameter> </paramdef>
<paramdef > const void **<parameter > data</parameter> </paramdef>
<paramdef > size_t *<parameter > length</parameter> </paramdef>
</funcprototype>
<funcprototype >
<funcdef > void <function > sd_journal_restart_unique</function> </funcdef>
<paramdef > sd_journal *<parameter > j</parameter> </paramdef>
</funcprototype>
<funcprototype >
<funcdef > <function > SD_JOURNAL_FOREACH_UNIQUE</function> </funcdef>
<paramdef > sd_journal *<parameter > j</parameter> </paramdef>
<paramdef > const void *<parameter > data</parameter> </paramdef>
<paramdef > size_t <parameter > length</parameter> </paramdef>
</funcprototype>
</funcsynopsis>
</refsynopsisdiv>
<refsect1 >
<title > Description</title>
<para > <function > sd_journal_query_unique()</function> queries the
journal for all unique values the specified field can take. It
takes two arguments: the journal to query and the field name to
look for. Well-known field names are listed on
<citerefentry > <refentrytitle > systemd.journal-fields</refentrytitle> <manvolnum > 7</manvolnum> </citerefentry> .
Field names must be specified without a trailing '='. After this
function has been executed successfully the field values may be
queried using <function > sd_journal_enumerate_unique()</function> .
Invoking this call a second time will change the field name being
queried and reset the enumeration index to the first field value
that matches.</para>
<para > <function > sd_journal_enumerate_unique()</function> may be
used to iterate through all data fields which match the previously
selected field name as set with
<function > sd_journal_query_unique()</function> . On each invocation
the next field data matching the field name is returned. The order
of the returned data fields is not defined. It takes three
arguments: the journal context object, plus a pair of pointers to
pointer/size variables where the data object and its size shall be
stored in. The returned data is in a read-only memory map and is
only valid until the next invocation of
<function > sd_journal_enumerate_unique()</function> . Note that the
data returned will be prefixed with the field name and '='. Note
that this call is subject to the data field size threshold as
controlled by
<function > sd_journal_set_data_threshold()</function> .</para>
<para > <function > sd_journal_restart_unique()</function> resets the
data enumeration index to the beginning of the list. The next
invocation of <function > sd_journal_enumerate_unique()</function>
will return the first field data matching the field name
again.</para>
<para > Note that the
<function > SD_JOURNAL_FOREACH_UNIQUE()</function> macro may be used
as a handy wrapper around
<function > sd_journal_restart_unique()</function> and
<function > sd_journal_enumerate_unique()</function> .</para>
<para > Note that these functions currently are not influenced by
matches set with <function > sd_journal_add_match()</function> but
this might change in a later version of this software.</para>
2016-01-27 20:59:29 +03:00
<para > To enumerate all field names currently in use (and thus all suitable field parameters for
<function > sd_journal_query_unique()</function> ), use the
<citerefentry > <refentrytitle > sd_journal_enumerate_fields</refentrytitle> <manvolnum > 3</manvolnum> </citerefentry>
call.</para>
2015-02-04 05:14:13 +03:00
</refsect1>
<refsect1 >
<title > Return Value</title>
<para > <function > sd_journal_query_unique()</function> returns 0 on
success or a negative errno-style error code.
<function > sd_journal_enumerate_unique()</function> returns a
positive integer if the next field data has been read, 0 when no
more fields are known, or a negative errno-style error code.
<function > sd_journal_restart_unique()</function> returns
nothing.</para>
</refsect1>
<refsect1 >
<title > Notes</title>
2018-08-03 17:43:30 +03:00
<xi:include href= "threads-aware.xml" xpointer= "strict" />
2016-10-15 22:24:55 +03:00
2018-06-06 12:59:04 +03:00
<xi:include href= "libsystemd-pkgconfig.xml" xpointer= "pkgconfig-text" />
2015-02-04 05:14:13 +03:00
</refsect1>
<refsect1 >
<title > Examples</title>
<para > Use the <function > SD_JOURNAL_FOREACH_UNIQUE</function> macro
to iterate through all values a field of the journal can take. The
following example lists all unit names referenced in the
journal:</para>
2018-07-27 09:24:45 +03:00
<programlisting > <xi:include href= "journal-iterate-unique.c" parse= "text" /> </programlisting>
2015-02-04 05:14:13 +03:00
</refsect1>
2012-10-18 20:48:45 +04:00
2015-02-04 05:14:13 +03:00
<refsect1 >
<title > See Also</title>
2012-10-18 20:48:45 +04:00
2015-02-04 05:14:13 +03:00
<para >
<citerefentry > <refentrytitle > systemd</refentrytitle> <manvolnum > 1</manvolnum> </citerefentry> ,
<citerefentry > <refentrytitle > systemd.journal-fields</refentrytitle> <manvolnum > 7</manvolnum> </citerefentry> ,
<citerefentry > <refentrytitle > sd-journal</refentrytitle> <manvolnum > 3</manvolnum> </citerefentry> ,
<citerefentry > <refentrytitle > sd_journal_open</refentrytitle> <manvolnum > 3</manvolnum> </citerefentry> ,
2016-01-27 20:59:29 +03:00
<citerefentry > <refentrytitle > sd_journal_enumerate_fields</refentrytitle> <manvolnum > 3</manvolnum> </citerefentry> ,
2015-02-04 05:14:13 +03:00
<citerefentry > <refentrytitle > sd_journal_get_data</refentrytitle> <manvolnum > 3</manvolnum> </citerefentry> ,
<citerefentry > <refentrytitle > sd_journal_add_match</refentrytitle> <manvolnum > 3</manvolnum> </citerefentry>
</para>
</refsect1>
2012-10-18 20:48:45 +04:00
</refentry>