summaryrefslogtreecommitdiff
path: root/man/sd_bus_message_append_array.xml
diff options
context:
space:
mode:
Diffstat (limited to 'man/sd_bus_message_append_array.xml')
-rw-r--r--man/sd_bus_message_append_array.xml123
1 files changed, 73 insertions, 50 deletions
diff --git a/man/sd_bus_message_append_array.xml b/man/sd_bus_message_append_array.xml
index c2adc6f43d..034466bf9c 100644
--- a/man/sd_bus_message_append_array.xml
+++ b/man/sd_bus_message_append_array.xml
@@ -49,7 +49,8 @@
<refname>sd_bus_message_append_array_iovec</refname>
<refname>sd_bus_message_append_array_space</refname>
- <refpurpose>Attach an array of items to a message</refpurpose>
+ <refpurpose>Appaned an array of fields to a D-Bus
+ message</refpurpose>
</refnamediv>
<refsynopsisdiv>
@@ -69,6 +70,8 @@
<paramdef>sd_bus_message *<parameter>m</parameter></paramdef>
<paramdef>char <parameter>type</parameter></paramdef>
<paramdef>int <parameter>memfd</parameter></paramdef>
+ <paramdef>uint64_t <parameter>offset</parameter></paramdef>
+ <paramdef>uint64_t <parameter>size</parameter></paramdef>
</funcprototype>
<funcprototype>
@@ -83,7 +86,7 @@
<funcdef>int sd_bus_message_append_array_space</funcdef>
<paramdef>char <parameter>type</parameter></paramdef>
<paramdef>size_t <parameter>size</parameter></paramdef>
- <paramdef>char void **<parameter>ptr</parameter></paramdef>
+ <paramdef>void **<parameter>ptr</parameter></paramdef>
</funcprototype>
</funcsynopsis>
</refsynopsisdiv>
@@ -91,18 +94,19 @@
<refsect1>
<title>Description</title>
- <para>The <function>sd_bus_message_append_array</function> functionc
- appends items to message <parameter>m</parameter> as the single
- array. A container will be opened, items appended, and the
- container closed. Parameter <parameter>type</parameter> determines
- how pointer <parameter>p</parameter> is interpreted.
+ <para>The <function>sd_bus_message_append_array()</function>
+ function appends an array to a D-Bus message
+ <parameter>m</parameter>. A container will be opened, the array
+ contents appended, and the container closed. The parameter
+ <parameter>type</parameter> determines how the pointer
+ <parameter>p</parameter> is interpreted.
<parameter>type</parameter> must be one of the "trivial" types
<literal>y</literal>, <literal>n</literal>, <literal>q</literal>,
<literal>i</literal>, <literal>u</literal>, <literal>x</literal>,
<literal>t</literal>, <literal>d</literal> (but not
- <literal>b</literal>), as defined by the
- <ulink url="http://dbus.freedesktop.org/doc/dbus-specification.html#basic-types">Basic Types</ulink>
- section of the D-Bus specification, and listed in
+ <literal>b</literal>), as defined by the <ulink
+ url="http://dbus.freedesktop.org/doc/dbus-specification.html#basic-types">Basic
+ Types</ulink> section of the D-Bus specification, and listed in
<citerefentry><refentrytitle>sd_bus_message_append_basic</refentrytitle><manvolnum>3</manvolnum></citerefentry>.
Pointer <parameter>p</parameter> must point to an array of size
<parameter>size</parameter> bytes containing items of the
@@ -110,50 +114,68 @@
multiple of the size of the type <parameter>type</parameter>. As a
special case, <parameter>p</parameter> may be
<constant>NULL</constant>, if <parameter>size</parameter> is 0.
- </para>
-
- <para>The memory pointed at by <parameter>p</parameter> is copied
- into the memory area containing the message and may be changed
- after this call.</para>
-
- <para>The
- <function>sd_bus_message_append_array_memfd</function> function appends
- items to message <parameter>m</parameter>, similarly to
- <function>sd_bus_message_append_array</function>. Contents of the
- memory file descriptor <parameter>memfd</parameter> are used as
- the contents of the array. Their size must be a multiple of the
- size of the type <parameter>type</parameter>.</para>
-
- <para>The descriptor specified with <parameter>memfd</parameter>
- will be sealed and cannot be modified after this call.</para>
-
- <para>The
- <function>sd_bus_message_append_array_iovec</function> function appends
- items to message <parameter>m</parameter>, similarly to
- <function>sd_bus_message_append_array</function>. Contents of the
- iovec <parameter>iov</parameter> are used as the contents of the
- array. The total size of <parameter>iov</parameter> payload (the
- sum of <structfield>iov_len</structfield> fields) must be a multiple
- of the size of the type <parameter>type</parameter>.</para>
-
- <para>The <parameter>iov</parameter> argument must point to
- <parameter>n</parameter> <structname>struct iovec</structname>
- structures. Each structure may have the
- <structname>iov_base</structname> field set, in which case the
- memory pointed to will be copied into the message, or unset, in
- which case a block of zeros of length
+ The memory pointed to by <parameter>p</parameter> is copied into
+ the memory area containing the message and stays in possession of
+ the caller. The caller may hence freely change the data after this
+ call without affecting the message the array was appended
+ to.</para>
+
+ <para>The <function>sd_bus_message_append_array_memfd()</function>
+ function appends an array of a trivial type to message
+ <parameter>m</parameter>, similar to
+ <function>sd_bus_message_append_array()</function>. The contents
+ of the memory file descriptor <parameter>memfd</parameter>
+ starting at the specified offset and and of the specified size is
+ used as the contents of the array. The offset and size must be a
+ multiple of the size of the type
+ <parameter>type</parameter>. However, as a special exception, if
+ the offset is specified as zero and the size specified as
+ UINT64_MAX the full memory file descriptor contents is used. The
+ memory file descriptor is sealed by this call if it hasn't been
+ sealed yet, and cannot be modified a after this call. See
+ <citerefentry
+ project='man-pages'><refentrytitle>memfd_create</refentrytitle><manvolnum>2</manvolnum></citerefentry>
+ for details about memory file descriptors. Appending arrays with
+ memory file descriptors enables efficient zero-copy data transfer,
+ as the memory file descriptor may be passed as-is to the
+ destination, without copying the memory in it to the destination
+ process. Not all protocol transports support passing memory file
+ descriptors between participants, in which case this call will
+ automatically fall back to copying. Also, as memory file
+ descriptor passing is inefficient for smaller amounts of data
+ copying might still be enforced even where memory file descriptor
+ passing is supported.</para>
+
+ <para>The <function>sd_bus_message_append_array_iovec()</function>
+ function appends an array of a trivial type to the message
+ <parameter>m</parameter>, similar to
+ <function>sd_bus_message_append_array()</function>. Contents of
+ the IO vector array <parameter>iov</parameter> are used as the
+ contents of the array. The total size of
+ <parameter>iov</parameter> payload (the sum of
+ <structfield>iov_len</structfield> fields) must be a multiple of
+ the size of the type <parameter>type</parameter>. The
+ <parameter>iov</parameter> argument must point to
+ <parameter>n</parameter> IO vector structures. Each structure may
+ have the <structname>iov_base</structname> field set, in which
+ case the memory pointed to will be copied into the message, or
+ unset (set to zero), in which case a block of zeros of length
<structname>iov_len</structname> bytes will be inserted. The
memory pointed at by <parameter>iov</parameter> may be changed
after this call.</para>
- <para>The
- <function>sd_bus_message_append_array_space</function> function appends
- space for an array of items to message <parameter>m</parameter>.
- It behaves the same as
- <function>sd_bus_message_append_array</function>, but instead
- of copying items to the message, it returns a pointer to the
- destination area to the caller in pointer <parameter>p</parameter>.
- </para>
+ <para>The <function>sd_bus_message_append_array_space()</function>
+ function appends space for an array of a trivial type to message
+ <parameter>m</parameter>. It behaves the same as
+ <function>sd_bus_message_append_array()</function>, but instead of
+ copying items to the message, it returns a pointer to the
+ destination area to the caller in pointer
+ <parameter>p</parameter>. The caller should subsequently write the
+ array contents to this memory. Modifications of the memory
+ pointed to should only occur until the next operation on the bus
+ message is invoked, most imporantly the memory should not be
+ altered anymore when another field has been added to the message
+ or the message has been sealed.</para>
</refsect1>
<refsect1>
@@ -183,6 +205,7 @@
<citerefentry><refentrytitle>sd-bus</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
<citerefentry><refentrytitle>sd_bus_message_append</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
<citerefentry><refentrytitle>sd_bus_message_append_basic</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
+ <citerefentry project='man-pages'><refentrytitle>memfd_create</refentrytitle><manvolnum>2</manvolnum></citerefentry>,
<ulink url="http://dbus.freedesktop.org/doc/dbus-specification.html">The D-Bus specification</ulink>
</para>
</refsect1>