DBus研究笔记(一)

2023-11-12

一.建立连接
        要使用DBus进行通信必须首先与系统建立连接, 并申请一个"域名"使得其他应用可以找到你。常用DBusConnection* dbus_bus_get(DBusBusType, DBusError*)系列函数来与bus daemon建立连接。DBusBusType为需要连接的总线类型有系统总线,会话总线,和DBUS_BUS_STARTER。系统总线顾名思义在整个系统级别都有效,而会话总线只是相对于当前登录的用户。
        需要说明的问题有两个:第一.dbus_bus_get可以被调用多次当用户,不想使用这个连接的时候需要需要调用dbus_connection_unref解除引用,原因在于,dbus_bus_get这个接口获取的连接不是私有的,不能直接调用dbus_connection_close关闭连接。第二.如果dbus_bus_get获得的是一个新的连接那么dbus_bus_get内部会调用dbus_connection_set_exit_on_disconnection()接口当用户把connection解除引用的时候,应用程序会自动退出。一般我们会在dbus_bus_get之后调用接口撤销该设置。

        其实dbus_bus_get所做的事情远比我们以为的复杂的多,首先做的第一件事情是,初始化bus_connection_addresses这个指针数组,指针指向的是总线地址,主要是通过环境变量来获取三种总线连接的地址,不同系统会有不一样的配置。根据用户指定需要连接的总线类型指定分别建立一张Hash表来管理DBusConnection。第二步:调用dbus_bus_register接口主要做的事情是调用一个系统标准的method叫"Hello"来获取一个unique name。

//建立连接
dbus_error_init(&err);
conn = dbus_bus_get(DBUS_BUS_SESSION, &err);
if(!conn && dbus_error_is_set(&err))
{
	printf("Error: %s\n", err.message);
	return (-1);
}
//设置为当收到disconnect信号的时候不退出应用程序(_exit())
dbus_connection_set_exit_on_disconnect(conn, FALSE);


二.注册公共名
      主要用的是dbus_bus_request_name接口,需要注意的是第三个标志位一般设置为DBUS_NAME_FLAG_REPLACE_EXISTING表示当前用户独占该名称,可以用返回值和DBUS_REQUEST_NAME_REPLY_PRIMARY_OWNER比较判断是否获取成功。

dbus_bus_request_name里面也用到了标准method:"RequestName"来申请名称。


                
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

DBus研究笔记(一) 的相关文章

  • 节点与C应用程序之间的进程间通信

    我有 2 个软件组件 我想互相交谈 一个 Node js Web 应用程序 用 C 编写的专用服务器 一段相当简单的代码 处理一些我不想为其他语言包装的晦涩库 我想要的对话非常简单 节点 设置资源 ID A C 应用程序 好的 这是参考号
  • 使用 SMJobBless() 编写特权帮助工具

    尽管该 API 自 Mac OS X Leopard 以来就已开放 但令人惊讶且不幸的是 关于如何正确使用的文档却很少SMJobBless 用于创建特权帮助工具 即使直接从 Apple 的示例项目复制代码 也存在很多问题 幸运的是 我找到了
  • Windows下appcontainer进程和普通进程之间有ipc的方式吗?

    我正在尝试在 Windows 中的 appcontainer 进程和普通进程之间建立 ipc 我在Windows appcontainer中做了一个进程 感谢这个article https www malwaretech com 2015
  • 如何在 Windows 上进行非阻塞 IPC 读取?

    我有一个 Perl 脚本 它使用外部工具 cleartool 来收集有关文件列表的信息 我想使用 IPC 来避免为每个文件生成一个新进程 use IPC Open2 my cin cout my child open2 cout cin c
  • 如何处理 C 和 Python 之间的 IPC?

    我有一个具有两个进程的应用程序 一个在 C 中 一个在 Python 中 C 进程是完成所有繁重工作的地方 而 Python 进程则处理用户界面 C 程序每秒向大型缓冲区写入 4 次 Python 进程读取该数据 至此与Python进程的通
  • C++ 和 Java 之间的低延迟 IPC

    对于以下情况 实现 C Java IPC 的最佳方法是什么 最近有人问类似的问题 https stackoverflow com questions 5900887 ipc between java and c applications 但
  • 从 Android 中的未绑定服务获取数据

    我目前有一个未绑定的服务 它正在不断运行 获取我在启动时启动的 GPS 位置 然后我有一个应用程序 它应该通过从服务中提取数据来绘制我去过的地方 我无法绑定服务来与之对话 否则一旦关闭应用程序 它将被销毁 有没有什么好的方法可以从未绑定的服
  • BLUEZ 中的 DBUS API

    我是 BLUEZ 和 Linux 的新手 我发现 Bluez 提倡使用 DBUS API 我还想知道 BLUEZ 中的 DBUS API 是什么 使用它们而不是直接的 C API 有什么好处 与 C API 相比有何不同 从我自己的经验来看
  • 将管道/连接作为上下文参数传递给多处理 Pool.apply_async()

    我想使用管道与池中的流程实例进行通信 但出现错误 让 p 成为 Pool 的一个实例 master pipe worker pipe Pipe self p apply async worker task handler info cont
  • 使用 Cromis IPC 进行双向通信

    我已经下载并玩了克罗米斯工控机 http www cromis net blog 2009 11 cromis ipc fast inter process communication named pipes 来自 Iztok Kacin
  • 如何快速学习Java RMI [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我有一个 Java 应用程序 我已经开发了一两年了 我想创建一组非常简单的接口 以后可能会增加复杂性 我可以使用它从另一个 JVM 例
  • IPC 的共享内存和线程的共享内存有什么区别?

    让我们使用 POSIX 共享内存 例如 shmget 协调进程间通信的常见调用 调用 shmget 并协调共享内存段上的通信与 Linux 在单个进程中实现共享内存和线程之间的同步有何不同 其中之一更轻吗 SHM适用于多进程中的IPC 在现
  • AF_UNIX 相当于 Windows [重复]

    这个问题在这里已经有答案了 我想知道如何在 Windows 上使用类似于 Unix Domain Socket 的功能 行为是 一个进程将成为 服务器 并接收来自其他进程的连接 并且它可以保留和使用来自不同进程的连接 就像 TCP 套接字一
  • 简单(但具体)的侦听器和发送器 Python 3 DBus 示例

    我想制作一个由两部分组成的程序 一个监听者 服务器 如果你愿意的话 和一个发送者 客户端 我做了一些研究 了解到这是通过程序员调用 IPC 进程间通信 的方法来完成的 我相信您知道它的意思 我只是扩展了缩写词 以便您知道我不认为它意味着 互
  • PyQt5 dbus:强制信号参数的类型签名为字符串数组

    我正在编写一个 MPRIS 播放器 它通过以下方式与客户进行通信 dbus 当我的播放状态发生变化时 我需要发出一个信号 然而 信号需要的格式为 sa sv as 我的代码正在生成 sa sv av 这是重要的部分 self signal
  • 将文本插入另一个应用程序的文本框中

    如何使用 C 或 C 将文本插入另一个应用程序的文本框中 我很久以前就这样做过 似乎还记得一些有关使用应用程序 HWND 的事情 但由于应用程序的每个实例都发生了变化 我觉得我不记得完整的故事了 我是否可以以某种方式获取正在运行的应用程序的
  • 使用 WM_COPYDATA 在进程之间发送数据

    我希望在进程之间发送文本 我发现了很多这样的例子 但没有一个我可以工作 这是我到目前为止所拥有的 对于发送部分 COPYDATASTRUCT CDS CDS dwData 1 CDS cbData 8 CDS lpData NULL Sen
  • Linux 消息队列 - 多个接收者

    我最近一直在研究和研究 Linux 消息队列 并遇到了一些我不太明白为什么会发生的事情 如果我们运行两个程序 它们都在无限 for 循环中使用 msgrcv 来检查消息 然后发送两条消息 那么第一个运行的程序将收到第一条消息 第二个程序将收
  • 将命令行参数传递给已运行的应用程序实例

    我想将应用程序新实例的命令行参数传递给已经运行的应用程序 如果存在 到目前为止 我已经尝试了以下方法 程序 cs string Arguments Environment GetCommandLineArgs int iCurrentPro
  • 使用PM2时如何配置master进程

    我在 NodeJS 中遇到 PM2 问题 如果没有 PM2 我们总是有如下几行代码来配置主进程 if cluster isMaster master process configuration else worker process con

随机推荐

  • 联合概率、边际概率、条件概率

    一时忘了联合概率 边际概率 条件概率是怎么回事 回头看看 某离散分布 联合概率 边际概率 条件概率的关系 其中 Pr X x Y y 为 XY的联合概率 Pr X x 为 X的边际概率 Pr X x Y y 为 X基于Y的条件概率 Pr Y
  • Openwrt编译报错 TCP Fast Open is not available for client mode 的解决办法

    报错信息 configure error TCP Fast Open is not available for client mode please rerun without enable tfo client gmake 3 Makef
  • Python安装教程步骤2:Windows中创建虚拟环境安装Pytorch并在PyCharm中配置虚拟环境

    python安装教程步骤2 windows中Anaconda创建虚拟环境安装pytorch并在pycharm中使用虚拟环境 作者介绍 windows中Anaconda创建虚拟环境安装pytorch 1 添加镜像源 2 创建虚拟环境 3 进入
  • ubuntu16.04详细安装pytorch(GPU)

    安装pytorch要安装两个模块 torch和torchvision torch是主模块 用来搭建神经网络 torchvision是辅模块 里面有搭建好的网络可以直接用 1 安装pip3 ubuntu自带python3 5和2 7 所以没装
  • linux 设置静态 ip 或者 修改 DNS

    设置 linux 静态 ip 或者 添加DNS preface 操作步骤 1 执行命令 nmtui 2 确认设置是否成功 supplements 3 1 linux 中 子网掩码的表示 3 2 DNS 和 ip 设置 3 3 DHCP 协议
  • Ribbon负载均衡(一)Ribbon实战

    Ribbon实战 文章目录 Ribbon实战 1 注册中心 1 1 服务注册到注册中心 1 2 服务注册列表Ribbon负载均衡选取相应节点 2 负载均衡方案 2 1 集中式负载均衡 2 2 进程内聚在均衡 3 Ribbon实践 3 1 配
  • Onvif协议学习:14、球机云台控制PTZ

    Onvif协议学习 14 球机云台控制PTZ 文章目录 Onvif协议学习 14 球机云台控制PTZ 一 介绍 二 代码实现 八个方向 放下及缩小控制 聚焦控制 原文链接 https blog csdn net u013566528 art
  • 步进电机原理及驱动

    这里把步进电机的资料做个整合 文章目录 步进电机是什么 原理 定子 定子的种类 转子及其种类 工作方式 单拍方式 双拍方式 单双拍方式 通电方式 驱动器 驱动程序 步进电机是什么 什么是步进电机 步进电机是将电脉冲信号 转变为角位移或线位移
  • Nginx概念及应用

    Nginx 一 反向代理 概念 反向代理服务器位于用户与目标服务器之间 但是对于用户而言 反向代理服务器就相当于目标服务器 即用户直接访问反向代理服务器就可以获得目标服务器的资源 同时 用户不需要知道目标服务器的地址 也无需在用户端做任何设
  • 2023年2月浙江省中小企业协会与各专委会大事记

    1 1月13日上午 协会领导蔡章生带队走访国家绿色技术交易中心 调研绿色技术创新工作 与国家绿色技术交易中心副主任贺沛宇 中教能源研究院黄刚院长 线上视频参会 项目主管郦剑飞等进行座谈 研究推进 双碳 产业 EATNS碳管理体系建设以及节能
  • 计算机网络知识点总结——第二章物理层

    第二章 物理层 一 概述 重点概念 二 数据通信 一 数据模型 二 数据通信相关术语 三 三种通信方式 四 数据传输方式 五 同步传输 异步传输 六 小节脑图 七 码元 八 数字通信系统数据传输速率 码元传输速率 码元速率 波形速率 调制速
  • 知识体系之MySQL

    目录 前言 1 一条select是怎么执行的 1 1 连接器 1 1 1 连接器的工作 1 1 2 长 短连接 1 2 查询缓存 1 3 解析器 1 4 执行SQL 1 4 1 预处理器 1 4 2 优化器 1 4 3 执行器 2 一条up
  • mysql有numeric类型吗_mysql数值类型 - numeric

    本文介绍php出现Warning A non numeric value encountered问题 用实例分析出现这种错误的原因 并提供避免及解决问题的方法
  • Codeforces 1634 F. Fibonacci Additions —— 斐波那契数列加,想法

    This way 题意 给你长度为n的数组a和数组b 每次会有一个操作 x l r 如果x是A表示在数组a上进行操作 否则是b l r表示将区间 l r 的数一一对应加上斐波那契数列 1 r l 1 的数 问你最后a和b是否相等 题解 斐波
  • 【建议收藏】新到手的电脑Windows10/11系统优化、使用规范和技巧及软件推荐,提升范电脑性能和体验

    目录 一 了解电脑 1 查看电脑和系统的基本信息 2 电脑测评 二 Windows10 11系统优化及设置 1 控制面板 回收站等桌面图标显示设置 2 任务栏管理 3 桌面图标排列 4 卸载程序 5 关闭P2P分享 传递优化 6 电设置脑为
  • SSTI 绕过方法总结

    SSTI 绕过方法总结 学习绕过的重点是掌握一个技术的使用方法 这其中的许多方法 看起来好像就那样 但是实验起来 就会发现哪哪都碰壁 针对不同的过滤情况 我们可以先构造一个常规的 payload 然后再根据实际情况进行改造绕过 这个常规 p
  • 数字化升级里,RPA的下一步正在走向哪?

    如果说 API这种能力在2021年并未成为 刚需 那么在2022年其已经一跃成为RPA进入企业真正场景的 必需品 作者 斗斗 编辑 皮爷 出品 产业家 今年八月 调查机构Gartner发布了2022全球RPA魔力象限 数据显示 2021年
  • 科学实验中剔除坏值的方法--肖维勒准则法

    def Chauvenet v c 5 1 65 6 1 73 7 1 8 8 1 86 9 1 92 10 1 96 11 2 12 2 03 n len v ave getAve v stdDev getStdDev v if len
  • mac的find命令

    在mac上使用find查找某个文件夹下面的所有 md文件 find name md 在mac上报如下错误 find illegal option n 在stackoverflow上找到了答案 https stackoverflow com
  • DBus研究笔记(一)

    一 建立连接 要使用DBus进行通信必须首先与系统建立连接 并申请一个 域名 使得其他应用可以找到你 常用DBusConnection dbus bus get DBusBusType DBusError 系列函数来与bus daemon建