2014-03-07 12:24:20 +08:00
|
|
|
|
<?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 2014 Zbigniew Jędrzejewski-Szmek
|
|
|
|
|
|
|
|
|
|
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_bus_message_append" conditional="ENABLE_KDBUS"
|
|
|
|
|
xmlns:xi="http://www.w3.org/2001/XInclude">
|
|
|
|
|
|
|
|
|
|
<refentryinfo>
|
|
|
|
|
<title>sd_bus_message_append</title>
|
|
|
|
|
<productname>systemd</productname>
|
|
|
|
|
|
|
|
|
|
<authorgroup>
|
|
|
|
|
<author>
|
|
|
|
|
<contrib>A monkey with a typewriter</contrib>
|
|
|
|
|
<firstname>Zbigniew</firstname>
|
|
|
|
|
<surname>Jędrzejewski-Szmek</surname>
|
|
|
|
|
<email>zbyszek@in.waw.pl</email>
|
|
|
|
|
</author>
|
|
|
|
|
</authorgroup>
|
|
|
|
|
</refentryinfo>
|
|
|
|
|
|
|
|
|
|
<refmeta>
|
|
|
|
|
<refentrytitle>sd_bus_message_append</refentrytitle>
|
|
|
|
|
<manvolnum>3</manvolnum>
|
|
|
|
|
</refmeta>
|
|
|
|
|
|
|
|
|
|
<refnamediv>
|
|
|
|
|
<refname>sd_bus_message_append</refname>
|
|
|
|
|
|
|
|
|
|
<refpurpose>Attach parts of message based on a format string</refpurpose>
|
|
|
|
|
</refnamediv>
|
|
|
|
|
|
|
|
|
|
<refsynopsisdiv>
|
|
|
|
|
<funcsynopsis>
|
|
|
|
|
<funcsynopsisinfo>#include <systemd/sd-bus.h></funcsynopsisinfo>
|
|
|
|
|
|
|
|
|
|
<funcprototype>
|
|
|
|
|
<funcdef>int sd_bus_message_append</funcdef>
|
|
|
|
|
<paramdef>sd_bus_message *<parameter>m</parameter></paramdef>
|
|
|
|
|
<paramdef>const char *<parameter>types</parameter></paramdef>
|
|
|
|
|
<paramdef>...</paramdef>
|
|
|
|
|
</funcprototype>
|
|
|
|
|
</funcsynopsis>
|
|
|
|
|
</refsynopsisdiv>
|
|
|
|
|
|
|
|
|
|
<refsect1>
|
|
|
|
|
<title>Description</title>
|
|
|
|
|
|
2014-05-08 07:28:45 +08:00
|
|
|
|
<para>The <function>sd_bus_message_append</function> function appends
|
2014-03-07 12:24:20 +08:00
|
|
|
|
a sequence of items to message <parameter>m</parameter>. The
|
|
|
|
|
format string <parameter>types</parameter> describes the types of
|
|
|
|
|
arguments that follow.</para>
|
|
|
|
|
|
|
|
|
|
<para>The format string is composed of the elements shown in the
|
|
|
|
|
table below. It contains zero or more single "complete types".
|
|
|
|
|
Each complete type may be one of the basic types or a fully
|
|
|
|
|
described container type. A container type may be a structure, a
|
|
|
|
|
variant type code, an array with its element type, or a dictionary
|
|
|
|
|
with its entry type. The format string is
|
|
|
|
|
<constant>NUL</constant>-terminated.</para>
|
|
|
|
|
|
|
|
|
|
<para>In case of a basic type, one argument of the corresponding
|
|
|
|
|
type is expected.</para>
|
|
|
|
|
|
|
|
|
|
<para>A structure is denoted by a sequence of complete types
|
|
|
|
|
between <literal>(</literal> and <literal>)</literal>. This
|
|
|
|
|
sequence cannot be empty — it must contain at least one type.
|
|
|
|
|
Arguments corresponding to this nested sequence follow the same
|
|
|
|
|
rules as if they were not nested.</para>
|
|
|
|
|
|
|
|
|
|
<para>A variant is denoted by <literal>v</literal>. Correspoding
|
|
|
|
|
arguments must include a format string denoting a complete type,
|
|
|
|
|
and following that, arguments corresponding to the specified type.
|
|
|
|
|
</para>
|
|
|
|
|
|
|
|
|
|
<para>An array is denoted by <literal>a</literal> followed by a
|
|
|
|
|
complete type. Corresponding arguments must include the size of
|
|
|
|
|
the array, and then repeated this number of times, arguments
|
|
|
|
|
corresponding to the nested type.</para>
|
|
|
|
|
|
|
|
|
|
<para>A dictionary is an array of dictionary entries, denoted by
|
|
|
|
|
<literal>a</literal> followed by a pair of complete types between
|
|
|
|
|
<literal>{</literal> and <literal>}</literal>. The first of those
|
|
|
|
|
types must be a basic type. Corresponding arguments must include
|
|
|
|
|
the size of the dictionary, and then repeated this number of
|
|
|
|
|
times, arguments corresponding to each of the two nested
|
|
|
|
|
types.</para>
|
|
|
|
|
|
|
|
|
|
<table>
|
|
|
|
|
<title>Item format specifiers</title>
|
|
|
|
|
|
|
|
|
|
<tgroup cols='4'>
|
|
|
|
|
<xi:include href="sd_bus_message_append_basic.xml" xpointer="xpointer(//table[@id='format-specifiers'])//colspec" />
|
|
|
|
|
<xi:include href="sd_bus_message_append_basic.xml" xpointer="xpointer(//table[@id='format-specifiers']//thead)" />
|
|
|
|
|
|
|
|
|
|
<tbody>
|
|
|
|
|
<xi:include href="sd_bus_message_append_basic.xml" xpointer="xpointer(//table[@id='format-specifiers']//tbody/*)" />
|
|
|
|
|
|
|
|
|
|
<row>
|
|
|
|
|
<entry><literal>a</literal></entry>
|
|
|
|
|
<entry><constant>SD_BUS_TYPE_ARRAY</constant></entry>
|
|
|
|
|
<entry>array</entry>
|
|
|
|
|
<entry>determined by array type and size</entry>
|
|
|
|
|
</row>
|
|
|
|
|
|
|
|
|
|
<row>
|
|
|
|
|
<entry><literal>v</literal></entry>
|
|
|
|
|
<entry><constant>SD_BUS_TYPE_VARIANT</constant></entry>
|
|
|
|
|
<entry>variant</entry>
|
|
|
|
|
<entry>determined by the type argument</entry>
|
|
|
|
|
</row>
|
|
|
|
|
|
|
|
|
|
<row>
|
|
|
|
|
<entry><literal>(</literal></entry>
|
|
|
|
|
<entry><constant>SD_BUS_TYPE_STRUCT_BEGIN</constant></entry>
|
|
|
|
|
<entry>array start</entry>
|
|
|
|
|
<entry morerows="1">determined by the nested types</entry>
|
|
|
|
|
</row>
|
|
|
|
|
<row>
|
|
|
|
|
<entry><literal>)</literal></entry>
|
|
|
|
|
<entry><constant>SD_BUS_TYPE_STRUCT_END</constant></entry>
|
|
|
|
|
<entry>array end</entry>
|
|
|
|
|
</row>
|
|
|
|
|
|
|
|
|
|
<row>
|
|
|
|
|
<entry><literal>{</literal></entry>
|
|
|
|
|
<entry><constant>SD_BUS_TYPE_DICT_ENTRY_BEGIN</constant></entry>
|
|
|
|
|
<entry>dictionary entry start</entry>
|
|
|
|
|
<entry morerows="1">determined by the nested types</entry>
|
|
|
|
|
</row>
|
|
|
|
|
<row>
|
|
|
|
|
<entry><literal>}</literal></entry>
|
|
|
|
|
<entry><constant>SD_BUS_TYPE_DICT_ENTRY_END</constant></entry>
|
|
|
|
|
<entry>dictionary entry end</entry>
|
|
|
|
|
</row>
|
|
|
|
|
</tbody>
|
|
|
|
|
</tgroup>
|
|
|
|
|
</table>
|
|
|
|
|
</refsect1>
|
|
|
|
|
|
|
|
|
|
<refsect1>
|
|
|
|
|
<title>Types string grammar</title>
|
|
|
|
|
|
|
|
|
|
<programlisting>types ::= complete_type*
|
|
|
|
|
complete_type ::= basic_type | variant | structure | array | dictionary
|
|
|
|
|
basic_type ::= "y" | "n" | "q" | "u" | "i" | "x" | "t" | "d" |
|
|
|
|
|
"b" | "h" |
|
|
|
|
|
"s" | "o" | "g"
|
|
|
|
|
variant ::= "v"
|
|
|
|
|
structure ::= "(" complete_type+ ")"
|
|
|
|
|
array ::= "a" complete_type
|
|
|
|
|
dictionary ::= "a" "{" basic_type complete_type "}"
|
|
|
|
|
</programlisting>
|
|
|
|
|
</refsect1>
|
|
|
|
|
|
|
|
|
|
<refsect1>
|
|
|
|
|
<title>Examples</title>
|
|
|
|
|
|
|
|
|
|
<para>Append a single basic type (the string <literal>a string</literal>):
|
|
|
|
|
</para>
|
|
|
|
|
|
|
|
|
|
<programlisting>sd_bus_message *m;
|
|
|
|
|
...
|
|
|
|
|
sd_bus_message_append(m, "s", "a string");</programlisting>
|
|
|
|
|
|
|
|
|
|
<para>Append all types of integers:</para>
|
|
|
|
|
|
|
|
|
|
<programlisting>uint8_t y = 1;
|
|
|
|
|
int16_t n = 2;
|
|
|
|
|
uint16_t q = 3;
|
|
|
|
|
int32_t i = 4;
|
|
|
|
|
uint32_t u = 5;
|
|
|
|
|
int32_t x = 6;
|
|
|
|
|
uint32_t t = 7;
|
|
|
|
|
double d = 8.0;
|
|
|
|
|
sd_bus_message_append(m, "ynqiuxtd", y, n, q, i, u, x, t, d);</programlisting>
|
|
|
|
|
|
|
|
|
|
<para>Append a structure composed of string and a D-Bus path:</para>
|
|
|
|
|
|
|
|
|
|
<programlisting>sd_bus_message_append(m, "(so)", "a string", "/a/path");
|
|
|
|
|
</programlisting>
|
|
|
|
|
|
|
|
|
|
<para>Append an array of UNIX file descriptors:</para>
|
|
|
|
|
|
|
|
|
|
<programlisting>sd_bus_message_append(m, "ah", 3, STDIN_FILENO, STDOUT_FILENO, STDERR_FILENO);
|
|
|
|
|
</programlisting>
|
|
|
|
|
|
|
|
|
|
<para>Append a variant, with the real type "g" (signature),
|
|
|
|
|
and value "sdbusisgood":</para>
|
|
|
|
|
|
|
|
|
|
<programlisting>sd_bus_message_append(m, "v", "g", "sdbusisgood");</programlisting>
|
|
|
|
|
|
|
|
|
|
<para>Append a dictionary containing the mapping {1=>"a", 2=>"b", 3=>""}:
|
|
|
|
|
</para>
|
|
|
|
|
|
|
|
|
|
<programlisting>sd_bus_message_append(m, "a{is}", 3, 1, "a", 2, "b", 3, NULL);
|
|
|
|
|
</programlisting>
|
|
|
|
|
</refsect1>
|
|
|
|
|
|
|
|
|
|
<refsect1>
|
|
|
|
|
<title>Return Value</title>
|
|
|
|
|
|
|
|
|
|
<para>On success, this call returns 0 or a positive
|
|
|
|
|
integer. On failure, this call returns a negative
|
|
|
|
|
errno-style error code.</para>
|
|
|
|
|
</refsect1>
|
|
|
|
|
|
|
|
|
|
<xi:include href="sd_bus_message_append_basic.xml" xpointer="errors" />
|
|
|
|
|
|
|
|
|
|
<refsect1>
|
|
|
|
|
<title>Notes</title>
|
|
|
|
|
|
|
|
|
|
<para><function>sd_bus_open_user()</function> and other functions
|
|
|
|
|
described here are available as a shared library, which can be
|
|
|
|
|
compiled and linked to with the
|
|
|
|
|
<constant>libsystemd-bus</constant> <citerefentry><refentrytitle>pkg-config</refentrytitle><manvolnum>1</manvolnum></citerefentry>
|
|
|
|
|
file.</para>
|
|
|
|
|
</refsect1>
|
|
|
|
|
|
|
|
|
|
<refsect1>
|
|
|
|
|
<title>See Also</title>
|
|
|
|
|
|
|
|
|
|
<para>
|
|
|
|
|
<citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
|
|
|
|
|
<citerefentry><refentrytitle>sd-bus</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
|
|
|
|
|
<citerefentry><refentrytitle>sd_bus_new</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
|
|
|
|
|
<citerefentry><refentrytitle>sd_bus_ref</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
|
|
|
|
|
<citerefentry><refentrytitle>sd_bus_unref</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
|
|
|
|
|
<citerefentry><refentrytitle>ssh</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
|
|
|
|
|
<citerefentry><refentrytitle>systemd-machined.service</refentrytitle><manvolnum>8</manvolnum></citerefentry>,
|
|
|
|
|
<citerefentry><refentrytitle>machinectl</refentrytitle><manvolnum>1</manvolnum></citerefentry>
|
|
|
|
|
</para>
|
|
|
|
|
</refsect1>
|
|
|
|
|
|
|
|
|
|
</refentry>
|