使用 D-Bus 发送消息
Send a message using D-Bus
我想使用 D-Bus 发送消息,但出现错误:
process 30860: arguments to dbus_message_new_signal() were incorrect, assertion "_dbus_check_is_valid_path (path)" failed in file ../../../dbus/dbus-message.c line 1456.
This is normally a bug in some application using the D-Bus library.
Message is null!
我的代码:
#include <stdio.h>
#include <dbus/dbus.h>
int main(){
DBusConnection *conn;
DBusError err;
dbus_error_init(&err);
conn = dbus_bus_get(DBUS_BUS_SESSION, &err);
if(!conn){
fprintf(stderr, "DBus error %s: %s\n", err.name, err.message);
return(1);
}
dbus_bus_request_name(conn, "org.test", DBUS_NAME_FLAG_REPLACE_EXISTING, &err);
if(dbus_error_is_set(&err)){
fprintf(stderr, "DBus error %s: %s\n", err.name, err.message);
dbus_connection_close(conn);
return(1);
}
DBusMessage *msg;
msg = dbus_message_new_signal("org/test/mon/data", "org.test.mon.data", "Data");
if(msg == NULL){
fprintf(stderr, "Message is null!\n");
return(1);
}
dbus_message_append_args(msg, DBUS_TYPE_STRING, "My message", DBUS_TYPE_INVALID);
if(!dbus_connection_send(conn, msg, NULL)) fprintf(stderr, "Error sending message!\n");
dbus_message_unref(msg);
dbus_connection_flush(conn);
dbus_connection_close(conn);
}
我试着按照几十个教程和示例进行操作,但我想我错过了一些东西。
我只需要发送一条短信。
dbus_message_new_signal()
的第一个参数是 D-Bus 路径,规范是这样描述路径的:
The path must begin with an ASCII '/' (integer 47) character
除了jku推荐的修复代码外,建议大家不要使用libdbus来连接D-Bus:它的设计已经过时,而且很难正确使用。
使用更现代的高级API更容易,例如GDBus。
我想使用 D-Bus 发送消息,但出现错误:
process 30860: arguments to dbus_message_new_signal() were incorrect, assertion "_dbus_check_is_valid_path (path)" failed in file ../../../dbus/dbus-message.c line 1456.
This is normally a bug in some application using the D-Bus library.
Message is null!
我的代码:
#include <stdio.h>
#include <dbus/dbus.h>
int main(){
DBusConnection *conn;
DBusError err;
dbus_error_init(&err);
conn = dbus_bus_get(DBUS_BUS_SESSION, &err);
if(!conn){
fprintf(stderr, "DBus error %s: %s\n", err.name, err.message);
return(1);
}
dbus_bus_request_name(conn, "org.test", DBUS_NAME_FLAG_REPLACE_EXISTING, &err);
if(dbus_error_is_set(&err)){
fprintf(stderr, "DBus error %s: %s\n", err.name, err.message);
dbus_connection_close(conn);
return(1);
}
DBusMessage *msg;
msg = dbus_message_new_signal("org/test/mon/data", "org.test.mon.data", "Data");
if(msg == NULL){
fprintf(stderr, "Message is null!\n");
return(1);
}
dbus_message_append_args(msg, DBUS_TYPE_STRING, "My message", DBUS_TYPE_INVALID);
if(!dbus_connection_send(conn, msg, NULL)) fprintf(stderr, "Error sending message!\n");
dbus_message_unref(msg);
dbus_connection_flush(conn);
dbus_connection_close(conn);
}
我试着按照几十个教程和示例进行操作,但我想我错过了一些东西。
我只需要发送一条短信。
dbus_message_new_signal()
的第一个参数是 D-Bus 路径,规范是这样描述路径的:
The path must begin with an ASCII '/' (integer 47) character
除了jku推荐的修复代码外,建议大家不要使用libdbus来连接D-Bus:它的设计已经过时,而且很难正确使用。
使用更现代的高级API更容易,例如GDBus。