python - 在 C 中对 BlueZ 提供的文件描述符进行操作

标签 python c linux bluetooth bluez

我正在尝试使用 BlueZ 5.44 中的 org.bluez.Profile1。当通过 NewConnection DBus 方法连接新设备时,我们会得到一个要使用的文件描述符。我很困惑这个文件描述符处于什么状态,以及我需要做什么才能从中读取/写入。简单地调用 read/write 对我来说并不像预期的那样。

在文件中test/test-profile ,我看到了这行 python 代码:

self.fd = fd.take()

我正在努力寻找与 take 方法等效的 Linux C。关于如何在 C 代码中配置此 fd 以便我可以使用 fd 进行读/写的任何建议都将非常有帮助!

谢谢

最佳答案

我的问题最终出在我使用的 gdbus-codegen 工具上。使用该工具时,每个 fd 参数实际上是 GUnixFDList 的索引(关于该对象的文档 here )。为了让 GUnixFDList 通过方法 NewConnection 传递,我不得不在 xml 中将方法注释为 org.gtk.GDBus.C.UnixFD。可以找到注释文档here .

关于python - 在 C 中对 BlueZ 提供的文件描述符进行操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45601302/

相关文章:

python - 向 django-allauth 的 OAuth token 添加权限

python - 使用 'spawn'启动Redis进程但面临TypeError:无法腌制_thread.lock对象

从 setuid root C 程序调用脚本 - 脚本不以 root 身份运行

linux - 为什么 date 命令不能识别我的变量?

linux - 在 Linux bash 中模拟 ENTER 键并一起导出另一个变量

python - 值错误 : matrices are not aligned

python - "NameError: global name is not defined"当 PDB 认为已定义时抛出

python - 如何以编程方式确定 "write"系统调用在特定文件上是否是原子的?

c - 在循环中使用 scanf 的程序打印不正确的输出

linux - 如何在列中格式化控制台输出