SD_BUS_MESSAGE_NEW_METHOD_CALL - Online Linux Manual PageSection : 3
Updated :
Source : systemd 250
Note : sd_bus_message_new_method_call
NAMEsd_bus_message_new_method_call, sd_bus_message_new_method_return − Create a method call message
SYNOPSIS#include <systemd/sd−bus.h>int sd_bus_message_new_method_call(sd_bus *bus, sd_bus_message **m, const char *destination, const char *path, const char *interface, const char *member); int sd_bus_message_new_method_return(sd_bus_message *call, sd_bus_message **m);
DESCRIPTIONThe sd_bus_message_new_method_call() function creates a new bus message object that encapsulates a D−Bus method call, and returns it in the m output parameter. The call will be made on the destination destination, path path, on the interface interface, member member. Briefly, the destination is a dot−separated name that identifies a service connected to the bus. The path is a slash−separated identifier of an object within the destination that resembles a file system path. The meaning of this path is defined by the destination. The interface is a dot−separated name that resembles a Java interface name that identifies a group of methods and signals supported by the object identified by path. Methods and signals are collectively called members and are identified by a simple name composed of ASCII letters, numbers, and underscores. See the D−Bus Tutorial[1] for an in−depth explanation. The destination parameter may be NULL. The interface parameter may be NULL, if the destination has only a single member with the given name and there is no ambiguity if the interface name is omitted. Note that this is a low level interface. See sd_bus_call_method(3) for a more convenient way of calling D−Bus methods. The sd_bus_message_new_method_return() function creates a new bus message object that is a reply to the method call call and returns it in the m output parameter. The call parameter must be a method call message. The sender of call is used as the destination.
RETURN VALUEOn success, these functions return a non−negative integer. On failure, they return a negative errno−style error code.
ErrorsReturned errors may indicate the following problems: −EINVAL The output parameter m is NULL. The destination parameter is non−null and is not a valid D−Bus service name ("org.somewhere.Something"), the path parameter is not a valid D−Bus path ("/an/object/path"), the interface parameter is non−null and is not a valid D−Bus interface name ("an.interface.name"), or the member parameter is not a valid D−Bus member ("Name"). The call parameter is not a method call object. −ENOTCONN The bus parameter bus is NULL or the bus is not connected. −ENOMEM Memory allocation failed. −EPERM The call parameter is not sealed. −EOPNOTSUPP The call message does not have a cookie.
NOTESThese APIs are implemented as a shared library, which can be compiled and linked to with the libsystemd pkg-config(1) file.
EXAMPLESExample 1. Make a call to a D−Bus method that takes a single parameter /* SPDX−License−Identifier: CC0−1.0 */
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <sys/types.h>
#include <systemd/sd−bus.h>
#define _cleanup_(f) __attribute__((cleanup(f)))
/* This is equivalent to:
* busctl call org.freedesktop.systemd1 /org/freedesktop/systemd1 \
* org.freedesktop.systemd1.Manager GetUnitByPID $$
*
* Compile with 'cc −lsystemd print−unit−path.c'
*/
#define DESTINATION "org.freedesktop.systemd1"
#define PATH "/org/freedesktop/systemd1"
#define INTERFACE "org.freedesktop.systemd1.Manager"
#define MEMBER "GetUnitByPID"
static int log_error(int error, const char *message) {
fprintf(stderr, "%s: %s\n", message, strerror(−error));
return error;
}
static int print_unit_path(sd_bus *bus) {
_cleanup_(sd_bus_message_unrefp) sd_bus_message *m = NULL;
_cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
_cleanup_(sd_bus_message_unrefp) sd_bus_message *reply = NULL;
int r;
r = sd_bus_message_new_method_call(bus, &m,
DESTINATION, PATH, INTERFACE, MEMBER);
if (r < 0)
return log_error(r, "Failed to create bus message");
r = sd_bus_message_append(m, "u", (unsigned) getpid());
if (r < 0)
return log_error(r, "Failed to append to bus message");
r = sd_bus_call(bus, m, −1, &error, &reply);
if (r < 0)
return log_error(r, "Call failed");
const char *ans;
r = sd_bus_message_read(reply, "o", &ans);
if (r < 0)
return log_error(r, "Failed to read reply");
printf("Unit path is \"%s\".\n", ans);
return 0;
}
int main(int argc, char **argv) {
_cleanup_(sd_bus_flush_close_unrefp) sd_bus *bus = NULL;
int r;
r = sd_bus_open_system(&bus);
if (r < 0)
return log_error(r, "Failed to acquire bus");
print_unit_path(bus);
}This defines a minimally useful program that will open a connection to the bus, create a message object, send it, wait for the reply, and finally extract and print the answer. It does error handling and proper memory management.
SEE ALSOsystemd(1), sd-bus(3), sd_bus_call(3), sd_bus_call_method(3), sd_bus_path_encode(3)
NOTES 1. D-Bus Tutorial https://dbus.freedesktop.org/doc/dbus-tutorial.html#concepts 0
Johanes Gumabo
Data Size : 19,992 byte
man-sd_bus_message_new_method_return.3Build : 2024-12-29, 07:25 :
Visitor Screen : x
Visitor Counter ( page / site ) : 3 / 260,674
Visitor ID : :
Visitor IP : 3.148.104.103 :
Visitor Provider : AMAZON-02 :
Provider Position ( lat x lon ) : 39.962500 x -83.006100 : x
Provider Accuracy Radius ( km ) : 1000 :
Provider City : Columbus :
Provider Province : Ohio , : ,
Provider Country : United States :
Provider Continent : North America :
Visitor Recorder : Version :
Visitor Recorder : Library :
Online Linux Manual Page : Version : Online Linux Manual Page - Fedora.40 - march=x86-64 - mtune=generic - 24.12.29
Online Linux Manual Page : Library : lib_c - 24.10.03 - march=x86-64 - mtune=generic - Fedora.40
Online Linux Manual Page : Library : lib_m - 24.10.03 - march=x86-64 - mtune=generic - Fedora.40
Data Base : Version : Online Linux Manual Page Database - 24.04.13 - march=x86-64 - mtune=generic - fedora-38
Data Base : Library : lib_c - 23.02.07 - march=x86-64 - mtune=generic - fedora.36
Very long time ago, I have the best tutor, Wenzel Svojanovsky . If someone knows the email address of Wenzel Svojanovsky , please send an email to johanes_gumabo@yahoo.co.id .
If error, please print screen and send to johanes_gumabo@yahoo.co.id
Under development. Support me via PayPal.