首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >最小GDBus客户端

最小GDBus客户端
EN

Stack Overflow用户
提问于 2018-07-10 23:29:26
回答 1查看 875关注 0票数 0

我一直在尝试编写一个简单的程序,它可以自动完成一些bluetoothctl所做的工作。它不需要是GPL的,所以我不能简单地复制bluetoothctl的源代码。最大的障碍就是让一个简单的D-Bus程序正常工作。由于我的目标是嵌入式系统(尽管功能相当强大),我负担不起运行Python或使用任何编程语言的费用。

我在这里看到了几个问题,还有大量网站指向obsolete things或断开的链接或documentation,上面写着我“注册了一些痛苦”。为什么没有一个简单的最小示例来建立D-Bus连接?

EN

回答 1

Stack Overflow用户

发布于 2018-07-10 23:29:26

这是一个Makefile:

代码语言:javascript
复制
LIBS=gio-2.0
CFLAGS=-O0 -ggdb3 `pkg-config --cflags $(LIBS)`
LDFLAGS=`pkg-config --libs $(LIBS)`

.PHONY: clean
default: gdbus-example
gdbus-example: gdbus-example.o
    gcc $^ $(LDFLAGS) -o $@

%.o: %.c
    gcc $(INCLUDE) $(CFLAGS) -o $@ -c $^

clean:
    rm -f *.o gdbus-example

下面是使用它构建的连接和监视bluez的最小C文件:

代码语言:javascript
复制
#include <stdio.h>
#include <gio/gio.h>

void name_appeared(GDBusConnection *connection,
                   const gchar *name,
                   const gchar *name_owner,
                   gpointer user_data)
{
    printf("Name appeared: %s\n", name);
    printf("Owned by: %s\n", name_owner);
}

void name_vanished(GDBusConnection *connection,
                   const gchar *name,
                   gpointer user_data)
{
    printf("Name vanished: %s\n", name);
}

int main(void)
{
    GMainLoop *loop;
    GError *error;
    guint name;

    loop = g_main_loop_new(NULL, FALSE);
    name = g_bus_watch_name(G_BUS_TYPE_SYSTEM,
                            "org.bluez", // 
                            G_BUS_NAME_WATCHER_FLAGS_NONE,
                            name_appeared,
                            name_vanished,
                            NULL,
                            NULL);

    g_main_loop_run(loop);
}

下面是一个示例终端会话,其中我重新启动了蓝牙服务:

代码语言:javascript
复制
$ ./gdbus-example 
Name appeared: org.bluez
Owned by: :1.16
Name vanished: org.bluez
Name appeared: org.bluez
Owned by: :1.1152

这是包含GDBus的gio documentation。它涵盖了如何构建和初始化GDBus程序。DBus项目指向high levellow level应用编程接口文档。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51269129

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档