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 <
productname>systemd</
productname>
<
contrib>Developer</
contrib>
<
firstname>Lennart</
firstname>
<
surname>Poettering</
surname>
<
email>lennart@poettering.net</
email>
<
refentrytitle>sd-id128</
refentrytitle>
<
refname>sd-id128</
refname>
<
refname>sd_id128_t</
refname>
<
refname>SD_ID128_MAKE</
refname>
<
refname>SD_ID128_CONST_STR</
refname>
<
refname>SD_ID128_FORMAT_STR</
refname>
<
refname>SD_ID128_FORMAT_VAL</
refname>
<
refname>sd_id128_equal</
refname>
<
refpurpose>APIs for processing 128-bit IDs</
refpurpose>
<
command>pkg-config --cflags --libs libsystemd</
command>
<
title>Description</
title>
<
para><
filename>
sd-id128.h</
filename> provides APIs to process and
generate 128-bit ID values. The 128-bit ID values processed and
generated by these APIs are a generalization of OSF UUIDs as
4122</
ulink> but use a simpler string format. These functions
impose no structure on the used IDs, much unlike OSF UUIDs or
Microsoft GUIDs, but are fully compatible with those types of IDs.
<
citerefentry><
refentrytitle>sd_id128_to_string</
refentrytitle><
manvolnum>3</
manvolnum></
citerefentry>,
<
citerefentry><
refentrytitle>sd_id128_randomize</
refentrytitle><
manvolnum>3</
manvolnum></
citerefentry>
<
citerefentry><
refentrytitle>sd_id128_get_machine</
refentrytitle><
manvolnum>3</
manvolnum></
citerefentry>
for more information about the implemented functions.</
para>
<
para>A 128-bit ID is implemented as the following
<
programlisting>typedef union sd_id128 {
} sd_id128_t;</
programlisting>
<
para>This union type allows accessing the 128-bit ID as 16
separate bytes or two 64-bit words. It is generally safer to
access the ID components by their 8-bit array to avoid endianness
issues. This union is intended to be passed call-by-value (as
opposed to call-by-reference) and may be directly manipulated by
<
para>A couple of macros are defined to denote and decode 128-bit
<
para><
function>SD_ID128_MAKE()</
function> may be used to denote a
constant 128-bit ID in source code. A commonly used idiom is to
assign a name to a 128-bit ID using this macro:</
para>
<
programlisting>#define SD_MESSAGE_COREDUMP SD_ID128_MAKE(fc,2e,22,bc,6e,e6,47,b6,b9,07,29,ab,34,a2,50,b1)</
programlisting>
<
para><
function>SD_ID128_CONST_STR()</
function> may be used to
convert constant 128-bit IDs into constant strings for output. The
following example code will output the string
"fc2e22bc6ee647b6b90729ab34a250b1":</
para>
<
programlisting>int main(int argc, char *argv[]) {
puts(SD_ID128_CONST_STR(SD_MESSAGE_COREDUMP));
<
para><
function>SD_ID128_FORMAT_STR</
function> and
<
function>SD_ID128_FORMAT_VAL()</
function> may be used to format a
<
citerefentry project='man-pages'><
refentrytitle>printf</
refentrytitle><
manvolnum>3</
manvolnum></
citerefentry>
format string, as shown in the following example:</
para>
<
programlisting>int main(int argc, char *argv[]) {
id = SD_ID128_MAKE(ee,89,be,71,bd,6e,43,d6,91,e6,c5,5d,eb,03,02,07);
printf("The ID encoded in this C file is " SD_ID128_FORMAT_STR ".\n", SD_ID128_FORMAT_VAL(id));
<
para>Use <
function>sd_id128_equal()</
function> to compare two 128-bit IDs:</
para>
<
programlisting>int main(int argc, char *argv[]) {
a = SD_ID128_MAKE(ee,89,be,71,bd,6e,43,d6,91,e6,c5,5d,eb,03,02,07);
b = SD_ID128_MAKE(f2,28,88,9c,5f,09,44,15,9d,d7,04,77,58,cb,e7,3e);
assert(sd_id128_equal(a, c));
assert(!sd_id128_equal(a, b));
<
para>Note that new, randomized IDs may be generated with
<
citerefentry><
refentrytitle>journalctl</
refentrytitle><
manvolnum>1</
manvolnum></
citerefentry>'s
<
option>--new-id</
option> option.</
para>
<
citerefentry><
refentrytitle>systemd</
refentrytitle><
manvolnum>1</
manvolnum></
citerefentry>,
<
citerefentry><
refentrytitle>sd_id128_to_string</
refentrytitle><
manvolnum>3</
manvolnum></
citerefentry>,
<
citerefentry><
refentrytitle>sd_id128_randomize</
refentrytitle><
manvolnum>3</
manvolnum></
citerefentry>,
<
citerefentry><
refentrytitle>sd_id128_get_machine</
refentrytitle><
manvolnum>3</
manvolnum></
citerefentry>,
<
citerefentry project='man-pages'><
refentrytitle>printf</
refentrytitle><
manvolnum>3</
manvolnum></
citerefentry>,
<
citerefentry><
refentrytitle>journalctl</
refentrytitle><
manvolnum>1</
manvolnum></
citerefentry>,
<
citerefentry><
refentrytitle>sd-journal</
refentrytitle><
manvolnum>7</
manvolnum></
citerefentry>,
<
citerefentry project='die-net'><
refentrytitle>pkg-config</
refentrytitle><
manvolnum>1</
manvolnum></
citerefentry>,
<
citerefentry><
refentrytitle>machine-id</
refentrytitle><
manvolnum>5</
manvolnum></
citerefentry>