sd_bus_request_name, sd_bus_release_name — Request or release a well-known name on a bus
#include <systemd/sd-bus.h>
int sd_bus_request_name( | sd_bus *bus, |
const char *name, | |
uint64_t flags) ; |
int sd_bus_release_name( | sd_bus *bus, |
const char *name) ; |
sd_bus_request_name()
requests
a well-known name on a bus. It takes a bus connection,
a valid bus name and a flags parameter. The flags
parameter is a combination of the following
flags:
SD_BUS_NAME_ALLOW_REPLACEMENT
¶After acquiring the
name successfully, permit other peers
to take over the name when they try to
acquire it with the
SD_BUS_NAME_REPLACE_EXISTING
flag set. If
SD_BUS_NAME_ALLOW_REPLACEMENT
is not set on the original request,
such a request by other peers will be
denied.
SD_BUS_NAME_REPLACE_EXISTING
¶Take over the name
if it is already acquired by another
peer, and that other peer has permitted
takeover by setting
SD_BUS_NAME_ALLOW_REPLACEMENT
while acquiring it.
SD_BUS_NAME_QUEUE
¶Queue the acquisition of the name when the name is already taken.
sd_bus_release_name()
releases
an acquired well-known name. It takes a bus connection
and a valid bus name as parameters.
On success, these calls return 0 or a positive integer. On failure, these calls return a negative errno-style error code.
If SD_BUS_NAME_QUEUE
is
specified, sd_bus_request_name()
will return 0 when the name is already taken by
another peer and the client has been added to the
queue for the name. In that case, the caller can
subscribe to "NameOwnerChanged
"
signals to be notified when the name is successfully
acquired. sd_bus_request_name()
returns > 0 when the name has immediately been
acquired successfully.
Returned errors may indicate the following problems:
-EALREADY
¶The caller already is the owner of the specified name.
-EEXIST
¶The name has already been acquired by a different peer, and SD_BUS_NAME_REPLACE_EXISTING was not specified or the other peer did not specify SD_BUS_NAME_ALLOW_REPLACEMENT while acquiring the name.
-ESRCH
¶It was attempted to release a name that is currently not registered on the bus.
-EADDRINUSE
¶It was attempted to release a name that is owned by a different peer on the bus.
-EINVAL
¶A specified parameter is invalid.
-ENOTCONN
¶The bus connection has been disconnected.
-ECHILD
¶The bus connection has been created in a different process than the current one.
The sd_bus_acquire_name()
and sd_bus_release_name()
interfaces are available as a shared library, which can
be compiled and linked to with the
libsystemd
pkg-config(1)
file.