Closed. This question is off-topic. It is not currently accepting answers. Learn more
想改进这个问题吗?Update the question所以堆栈溢出的值小于aa>。
我一直在尝试制作一个简单的程序,它可以完成bluetoothctl的一些功能,但是是自动完成的。它不需要GPL,所以我不能只复制BluetoothCTL的源代码。最大的障碍就是让一个简单的d-bus程序工作。因为我的目标是一个嵌入式系统(尽管它相当强大),所以我负担不起运行python或仅仅使用任何编程语言。
我在这里看到了几个问题,还有很多指向on-topic或断开链接或obsolete things的网站,上面写着我正在“注册一些痛苦的东西”。为什么没有一个简单的最小示例来建立d-bus连接?

最佳答案

这是一个生成文件:

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

下面是一个最小的C文件,用来连接和监视Bluez:
#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);
}

下面是我重新启动蓝牙服务的示例终端会话:
$ ./gdbus-example
Name appeared: org.bluez
Owned by: :1.16
Name vanished: org.bluez
Name appeared: org.bluez
Owned by: :1.1152

这是gio documentation,其中包括gdbus。它涵盖了如何构建和初始化gdbus程序。dbus项目指向high levellow levelapi文档。

关于c - 最少的GDBus客户端,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51269129/

10-11 04:10