配置gdbug环境并进行简单通信

1.环境搭建

wsl下输入:

sudo apt-get update
sudo apt-get install libglib2.0-dev libdbus-1-dev

启动dbus守护进程:dbus-launch

测试代码

#include <gio/gio.h>
#include <stdio.h>

int main(void) {
    GDBusConnection *connection;
    GError *error = NULL;

    // 尝试连接到系统总线
    // G_BUS_TYPE_SESSION --- 会话总线
    // G_BUS_TYPE_SYSTEM --- 系统总线
    connection = g_bus_get_sync(G_BUS_TYPE_SYSTEM, NULL, &error);
    if (error != NULL) {
        printf("Failed to connect to the D-Bus system bus: %s\n", error->message);
        g_error_free(error);
        return 1;
    }

    printf("Successfully connected to the D-Bus system bus\n");

    g_object_unref(connection);
    return 0;
}

编译:gcc gdbus_test.c -o gdbus_test pkg-config --cflags --libs gio-2.0

运行:./gdbus_test

这里使用的是系统总线的连接方式,会话总线在wsl命令行环境下可能会出现错误;

解决方式:

创建一个临时的会话总线:dbus-run-session – ./gdbus_test

使用系统总线

2.测试Server和client之间通过会话总线进行通信

拉取一个代码仓库进行server和client的测试:Pedal2Metal/GDBus: gdbus demo (github.com)

安装g++编译环境:sudo apt-get install g++
查看位置:which g++
查看版本号:g++ --version

保证server和client在同一个会话总线中执行:

# 第一个窗口
# 创建一个bash总线
dbus-run-session -- bash

# 获取总线的地址
echo $DBUS_SESSION_BUS_ADDRESS
输出结果:
unix:abstract=/tmp/dbus-kaJn0JAICX,guid=f721671dd019f40ddf8b335866c2b929

# 执行server程序
./server

-----------------------------------------
#第二个窗口
# 通过实际的地址来保证两个client和server在同一个会话总线中
export DBUS_SESSION_BUS_ADDRESS='上述的总线地址'

# 之心client程序
./client

结果:

服务端:
在这里插入图片描述

客户端:
在这里插入图片描述

3.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<!-- 在server的角度对DBus接口做出的描述 -->
<!-- direction="in":Proxy传入到Server。
     direction="out":Server返回给Proxy。 -->
<node>
  <interface name="com.gdbus.demo">    <!-- 定义接口 -->
    <!-- 定义了一个函数,一个输入一个输出 -->
    <method name="SetName">
      <arg name="name" type="s" direction="in"/>
      <arg name="response" type="s" direction="out"/>
    </method>
    <!-- 定义了一个信号 -->
    <signal name="SendSignal">
      <arg name="sig" type="i"/>
    </signal>
  </interface>
</node>

使用 xmllint 工具来验证 XML 文件的格式是否正确

sudo apt  install libxml2-utils
xmllint --noout Interface.xml

定义好xml文件之后,使用命令:

gdbus-codegen --generate-c-code SourceName Interface.xml

生成对应的接口文件:

SourceName这里就是指定函数名称
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值