2 <!DOCTYPE refentry PUBLIC
"-//OASIS//DTD DocBook XML V4.2//EN"
3 "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">
6 SPDX-License-Identifier: LGPL-2.1+
9 <refentry id=
"sd_bus_new" xmlns:
xi=
"http://www.w3.org/2001/XInclude">
12 <title>sd_bus_new
</title>
13 <productname>systemd
</productname>
17 <refentrytitle>sd_bus_new
</refentrytitle>
18 <manvolnum>3</manvolnum>
22 <refname>sd_bus_new
</refname>
23 <refname>sd_bus_ref
</refname>
24 <refname>sd_bus_unref
</refname>
25 <refname>sd_bus_unrefp
</refname>
27 <refpurpose>Create a new bus object and create or destroy references to it
</refpurpose>
32 <funcsynopsisinfo>#include
<systemd/sd-bus.h
></funcsynopsisinfo>
35 <funcdef>int
<function>sd_bus_new
</function></funcdef>
36 <paramdef>sd_bus **
<parameter>bus
</parameter></paramdef>
40 <funcdef>sd_bus *
<function>sd_bus_ref
</function></funcdef>
41 <paramdef>sd_bus *
<parameter>bus
</parameter></paramdef>
45 <funcdef>sd_bus *
<function>sd_bus_unref
</function></funcdef>
46 <paramdef>sd_bus *
<parameter>bus
</parameter></paramdef>
50 <funcdef>void
<function>sd_bus_unrefp
</function></funcdef>
51 <paramdef>sd_bus **
<parameter>busp
</parameter></paramdef>
57 <title>Description
</title>
59 <para><function>sd_bus_new()
</function> creates a new bus
60 object. This object is reference-counted, and will be destroyed
61 when all references are gone. Initially, the caller of this
62 function owns the sole reference and the bus object will not be
63 connected to any bus. To connect it to a bus, make sure
64 to set an address with
65 <citerefentry><refentrytitle>sd_bus_set_address
</refentrytitle><manvolnum>3</manvolnum></citerefentry>
66 or a related call, and then start the connection with
67 <citerefentry><refentrytitle>sd_bus_start
</refentrytitle><manvolnum>3</manvolnum></citerefentry>.
</para>
69 <para>In most cases, it is a better idea to invoke
70 <citerefentry><refentrytitle>sd_bus_default_user
</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
71 <citerefentry><refentrytitle>sd_bus_default_system
</refentrytitle><manvolnum>3</manvolnum></citerefentry>
72 or related calls instead of the more low-level
73 <function>sd_bus_new()
</function> and
74 <function>sd_bus_start()
</function>. The higher-level calls not
75 only allocate a bus object but also start the connection to a
76 well-known bus in a single function invocation.
</para>
78 <para><function>sd_bus_ref()
</function> increases the reference
79 counter of
<parameter>bus
</parameter> by one.
</para>
81 <para><function>sd_bus_unref()
</function> decreases the reference
82 counter of
<parameter>bus
</parameter> by one. Once the reference
83 count has dropped to zero,
<parameter>bus
</parameter> is destroyed
84 and cannot be used anymore, so further calls to
85 <function>sd_bus_ref()
</function> or
86 <function>sd_bus_unref()
</function> are illegal.
</para>
88 <para><function>sd_bus_unrefp()
</function> is similar to
89 <function>sd_bus_unref()
</function> but takes a pointer to a
90 pointer to an
<type>sd_bus
</type> object. This call is useful in
91 conjunction with GCC's and LLVM's
<ulink
92 url=
"https://gcc.gnu.org/onlinedocs/gcc/Common-Variable-Attributes.html">Clean-up
93 Variable Attribute
</ulink>. Note that this function is defined as
94 inline function. Use a declaration like the following, in order to
95 allocate a bus object that is freed automatically as the code
99 __attribute__((cleanup(sd_bus_unrefp)) sd_bus *bus = NULL;
102 r = sd_bus_default(
&bus);
104 fprintf(stderr,
"Failed to allocate bus: %s\n", strerror(-r));
108 <para><function>sd_bus_ref()
</function> and
<function>sd_bus_unref()
</function>
109 execute no operation if the passed in bus object address is
110 <constant>NULL
</constant>.
<function>sd_bus_unrefp()
</function> will first
111 dereference its argument, which must not be
<constant>NULL
</constant>, and will
112 execute no operation if
<emphasis>that
</emphasis> is
<constant>NULL
</constant>.
117 <title>Return Value
</title>
119 <para>On success,
<function>sd_bus_new()
</function> returns
0 or a
120 positive integer. On failure, it returns a negative errno-style
123 <para><function>sd_bus_ref()
</function> always returns the argument.
126 <para><function>sd_bus_unref()
</function> always returns
127 <constant>NULL
</constant>.
</para>
131 <title>Errors
</title>
133 <para>Returned errors may indicate the following problems:
</para>
137 <term><constant>-ENOMEM
</constant></term>
139 <listitem><para>Memory allocation failed.
</para></listitem>
144 <xi:include href=
"libsystemd-pkgconfig.xml" />
147 <title>See Also
</title>
150 <citerefentry><refentrytitle>systemd
</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
151 <citerefentry><refentrytitle>sd-bus
</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
152 <citerefentry><refentrytitle>sd_bus_default_user
</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
153 <citerefentry><refentrytitle>sd_bus_default_system
</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
154 <citerefentry><refentrytitle>sd_bus_open_user
</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
155 <citerefentry><refentrytitle>sd_bus_open_system
</refentrytitle><manvolnum>3</manvolnum></citerefentry>