Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 使用D-Bus发送消息_C_Dbus - Fatal编程技术网

C 使用D-Bus发送消息

C 使用D-Bus发送消息,c,dbus,C,Dbus,我想使用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

我想使用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);
}
#包括
#包括
int main(){
DBU连接*conn;
DBusError错误;
dbus_error_init(&err);
conn=dbus\u-bus\u-get(dbus\u-bus\u会话,&err);
如果(!conn){
fprintf(stderr,“DBus错误%s:%s\n”、err.name、err.message);
申报表(1);
}
dbus\u总线\u请求\u名称(conn,“org.test”、dbus\u名称\u标志\u替换\u现有,&err);
if(dbus\u error\u已设置(&err)){
fprintf(stderr,“DBus错误%s:%s\n”、err.name、err.message);
dbus连接关闭(连接);
申报表(1);
}
DBusMessage*msg;
msg=dbus_message_new_信号(“org/test/mon/data”、“org.test.mon.data”、“data”);
如果(msg==NULL){
fprintf(stderr,“消息为空!\n”);
申报表(1);
}
dbus_message_append_args(消息,dbus_TYPE_字符串,“我的消息”,dbus_TYPE_无效);
如果(!dbus_connection_send(conn,msg,NULL))fprintf(stderr,“发送错误消息!\n”);
dbus_message_unref(msg);
dbus_连接_冲洗(连接);
dbus连接关闭(连接);
}
我尝试了几十个教程和例子,但我想我错过了一些东西


我只需要发送一条带有文本的消息。

dbus\u message\u new\u signal()的第一个参数是一个D总线路径,规范中对路径做了如下说明:

路径必须以ASCII“/”(整数47)字符开头


除了按照jku的建议修复代码外,还建议不要使用libdbus连接到D-Bus:它的设计已经过时,正确使用是一件痛苦的事情


使用更现代的高级API更容易,例如。

谢谢!多么愚蠢的错误…完全同意这一点,如果我有选择的话,我再也不会使用libdbus了。