1 <html><head><meta http-equiv=
"Content-Type" content=
"text/html; charset=UTF-8"><title>sd-id128
</title><meta name=
"generator" content=
"DocBook XSL Stylesheets V1.78.1"></head><body bgcolor=
"white" text=
"black" link=
"#0000FF" vlink=
"#840084" alink=
"#0000FF"><style>
11 background-color: #c60f0f;
15 h1:hover
> a.headerlink, h2:hover
> a.headerlink, h3:hover
> a.headerlink, dt:hover
> a.headerlink {
18 </style><a href=
"index.html">Index
</a>·
19 <a href=
"systemd.directives.html">Directives
</a>·
20 <a href=
"../python-systemd/index.html">Python
</a>·
21 <a href=
"../libudev/index.html">libudev
</a>·
22 <a href=
"../libudev/index.html">gudev
</a><span style=
"float:right">systemd
218</span><hr><div class=
"refentry"><a name=
"sd-id128"></a><div class=
"titlepage"></div><div class=
"refnamediv"><h2>Name
</h2><p>sd-id128, sd_id128_t, SD_ID128_MAKE, SD_ID128_CONST_STR, SD_ID128_FORMAT_STR, SD_ID128_FORMAT_VAL, sd_id128_equal — APIs for processing
128-bit IDs
</p></div><div class=
"refsynopsisdiv"><h2>Synopsis
</h2><div class=
"funcsynopsis"><pre class=
"funcsynopsisinfo">#include
<systemd/sd-id128.h
></pre></div><div class=
"cmdsynopsis"><p><code class=
"command">pkg-config --cflags --libs libsystemd
</code> </p></div></div><div class=
"refsect1"><a name=
"idm140007389054800"></a><h2 id=
"Description">Description
<a class=
"headerlink" title=
"Permalink to this headline" href=
"#Description">¶
</a></h2><p><code class=
"filename">sd-id128.h
</code> provides APIs to
23 process and generate
128-bit ID values. The
128-bit ID
24 values processed and generated by these APIs are a
25 generalization of OSF UUIDs as defined by
<a class=
"ulink" href=
"https://tools.ietf.org/html/rfc4122" target=
"_top">RFC
26 4122</a> but use a simpler string
27 format. These functions impose no structure on the
28 used IDs, much unlike OSF UUIDs or Microsoft GUIDs,
29 but are fully compatible with those types of IDs.
31 <a href=
"sd_id128_to_string.html"><span class=
"citerefentry"><span class=
"refentrytitle">sd_id128_to_string
</span>(
3)
</span></a>,
32 <a href=
"sd_id128_randomize.html"><span class=
"citerefentry"><span class=
"refentrytitle">sd_id128_randomize
</span>(
3)
</span></a> and
33 <a href=
"sd_id128_get_machine.html"><span class=
"citerefentry"><span class=
"refentrytitle">sd_id128_get_machine
</span>(
3)
</span></a>
34 for more information about the implemented
35 functions.
</p><p>A
128-bit ID is implemented as the following
36 union type:
</p><pre class=
"programlisting">typedef union sd_id128 {
39 } sd_id128_t;
</pre><p>This union type allows accessing the
128-bit ID
40 as
16 separate bytes or two
64-bit words. It is generally
41 safer to access the ID components by their
8-bit array
42 to avoid endianness issues. This union is intended to
43 be passed call-by-value (as opposed to
44 call-by-reference) and may be directly manipulated by
45 clients.
</p><p>A couple of macros are defined to denote and
46 decode
128-bit IDs:
</p><p><code class=
"function">SD_ID128_MAKE()
</code> may be used
47 to denote a constant
128-bit ID in source code. A
48 commonly used idiom is to assign a name to a
128-bit
49 ID using this macro:
</p><pre class=
"programlisting">#define SD_MESSAGE_COREDUMP SD_ID128_MAKE(fc,
2e,
22,bc,
6e,e6,
47,b6,b9,
07,
29,ab,
34,a2,
50,b1)
</pre><p><code class=
"function">SD_ID128_CONST_STR()
</code> may be
50 used to convert constant
128-bit IDs into constant
51 strings for output. The following example code will
53 "fc2e22bc6ee647b6b90729ab34a250b1":
</p><pre class=
"programlisting">int main(int argc, char *argv[]) {
54 puts(SD_ID128_CONST_STR(SD_MESSAGE_COREDUMP));
55 }
</pre><p><code class=
"function">SD_ID128_FORMAT_STR
</code> and
56 <code class=
"function">SD_ID128_FORMAT_VAL()
</code> may be used
57 to format a
128-bit ID in a
58 <a href=
"http://man7.org/linux/man-pages/man3/printf.3.html"><span class=
"citerefentry"><span class=
"refentrytitle">printf
</span>(
3)
</span></a>
59 format string, as shown in the following
60 example:
</p><pre class=
"programlisting">int main(int argc, char *argv[]) {
62 id = SD_ID128_MAKE(ee,
89,be,
71,bd,
6e,
43,d6,
91,e6,c5,
5d,eb,
03,
02,
07);
63 printf(
"The ID encoded in this C file is " SD_ID128_FORMAT_STR
".\n", SD_ID128_FORMAT_VAL(id));
65 }
</pre><p>Use
<code class=
"function">sd_id128_equal()
</code> to compare two
128-bit IDs:
</p><pre class=
"programlisting">int main(int argc, char *argv[]) {
67 a = SD_ID128_MAKE(ee,
89,be,
71,bd,
6e,
43,d6,
91,e6,c5,
5d,eb,
03,
02,
07);
68 b = SD_ID128_MAKE(f2,
28,
88,
9c,
5f,
09,
44,
15,
9d,d7,
04,
77,
58,cb,e7,
3e);
70 assert(sd_id128_equal(a, c));
71 assert(!sd_id128_equal(a, b));
73 }
</pre><p>Note that new, randomized IDs may be generated
75 <a href=
"journalctl.html"><span class=
"citerefentry"><span class=
"refentrytitle">journalctl
</span>(
1)
</span></a>'s
76 <code class=
"option">--new-id
</code> option.
</p></div><div class=
"refsect1"><a name=
"idm140007381428800"></a><h2 id=
"Notes">Notes
<a class=
"headerlink" title=
"Permalink to this headline" href=
"#Notes">¶
</a></h2><p><a name=
"pkgconfig-text"></a>These APIs are implemented as a shared
77 library, which can be compiled and linked to with the
78 <code class=
"constant">libsystemd
</code> <a href=
"http://linux.die.net/man/1/pkg-config"><span class=
"citerefentry"><span class=
"refentrytitle">pkg-config
</span>(
1)
</span></a>
79 file.
</p></div><div class=
"refsect1"><a name=
"idm140007389110688"></a><h2 id=
"See Also">See Also
<a class=
"headerlink" title=
"Permalink to this headline" href=
"#See%20Also">¶
</a></h2><p>
80 <a href=
"systemd.html"><span class=
"citerefentry"><span class=
"refentrytitle">systemd
</span>(
1)
</span></a>,
81 <a href=
"sd_id128_to_string.html"><span class=
"citerefentry"><span class=
"refentrytitle">sd_id128_to_string
</span>(
3)
</span></a>,
82 <a href=
"sd_id128_randomize.html"><span class=
"citerefentry"><span class=
"refentrytitle">sd_id128_randomize
</span>(
3)
</span></a>,
83 <a href=
"sd_id128_get_machine.html"><span class=
"citerefentry"><span class=
"refentrytitle">sd_id128_get_machine
</span>(
3)
</span></a>,
84 <a href=
"http://man7.org/linux/man-pages/man3/printf.3.html"><span class=
"citerefentry"><span class=
"refentrytitle">printf
</span>(
3)
</span></a>,
85 <a href=
"journalctl.html"><span class=
"citerefentry"><span class=
"refentrytitle">journalctl
</span>(
1)
</span></a>,
86 <a href=
"sd-journal.html"><span class=
"citerefentry"><span class=
"refentrytitle">sd-journal
</span>(
7)
</span></a>,
87 <a href=
"http://linux.die.net/man/1/pkg-config"><span class=
"citerefentry"><span class=
"refentrytitle">pkg-config
</span>(
1)
</span></a>,
88 <a href=
"machine-id.html"><span class=
"citerefentry"><span class=
"refentrytitle">machine-id
</span>(
5)
</span></a>
89 </p></div></div></body></html>