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研究笔记(一) 的相关文章

  • IPC 的共享内存和线程的共享内存有什么区别?

    让我们使用 POSIX 共享内存 例如 shmget 协调进程间通信的常见调用 调用 shmget 并协调共享内存段上的通信与 Linux 在单个进程中实现共享内存和线程之间的同步有何不同 其中之一更轻吗 SHM适用于多进程中的IPC 在现
  • 使用 setjmp / longjmp 的通信协议和本地环回

    我使用共享内存和共享互斥体编写了一些相对简单的通信协议 但后来我想扩展支持以在使用不同运行时的两个 dll 之间进行通信 很明显 如果你有一些std vector lt int64 gt 和两个 dll 一个 vs2010 一个 vs201
  • 带有 Python 子进程的 IPC

    我正在尝试在 Python 中执行一些简单的 IPC 如下所示 一个 Python 进程启动另一个进程subprocess 子进程将一些数据发送到管道中 父进程接收它 这是我当前的实现 parent py import pickle imp
  • C++ 进程间通信的最佳方式

    我有两个进程 一个进程将查询另一个进程的数据 在有限的时间内 每秒 10000 个 将会有大量的查询 并且每秒将传输数据 gt 100 mb 数据类型将是整数类型 双精度 整数 我的问题是用什么方式连接这个过程 共享内存 消息队列 lpc
  • Python/POpen/gpg:通过标准输入或文件描述符提供密码和加密文本

    我正在尝试通过 python 程序远程控制 gpgPOpen 我有一个包含加密数据的文件 我想对其进行解密 修改并重新加密写回磁盘 目前我将解密的信息存储在一个临时文件中 我shred当程序结束时 然后我对该文件进行修改 然后使用一个函数重
  • AF_UNIX 相当于 Windows [重复]

    这个问题在这里已经有答案了 我想知道如何在 Windows 上使用类似于 Unix Domain Socket 的功能 行为是 一个进程将成为 服务器 并接收来自其他进程的连接 并且它可以保留和使用来自不同进程的连接 就像 TCP 套接字一
  • 是否可以跨进程使用函数指针?

    我知道每个进程都会创建自己的内存地址空间 但是我想知道 如果进程 A 具有如下功能 int DoStuff return 1 和一个指针 typedef 如 typedef int DoStuff f 和 getter 函数 例如 DoSt
  • iOS 应用程序可以通过套接字进行通信吗?

    我将为 iOS 开发一些应用程序 他们可以通过套接字相互通信吗 假设一个应用程序作为服务器运行 即使在后台模式下 另一个应用程序作为客户端连接到服务器应用程序并执行一些通信 它是否违反了任何 App Store 规则 如果我的想法由于某种原
  • IPC 跨不同 Docker 容器中的 Python 脚本共享内存

    问题 我编写了一个神经网络分类器 它接收大量图像 每个图像约 1 3 GB 对它们进行修补 然后将修补程序单独通过网络传递 训练正在进行中really慢慢地 所以我对它进行了基准测试 发现将补丁从一张图像加载到内存中需要大约 50 秒 使用
  • 远程过程调用认证

    我正在使用远程过程调用 RPC 在本地计算机上通信数据 我的要求是使用 RPC 在两个处理之间通信数据 但服务器应该通过某种方式对客户端进行身份验证 我遇到了 RpcBindingSetAuthInfo 它设置身份验证和授权信息 第四个参数
  • 在 python 中使用 org.mpris.mediaplayer2.player PlaybackStatus 属性

    The 规格页 http specifications freedesktop org mpris spec latest Player Interface html summary对于这个特定的接口说 PlaybackStatus s P
  • 如何使用应用程序接口将蓝牙套接字传递给另一个活动

    因此 根据我收集的信息 套接字连接既不可序列化 也不可分割 但我需要将蓝牙连接传递给另一个活动 我不想作为中间人编写服务 所以请不要将此作为解决方案发布 我听说有一种方法可以使用自定义应用程序接口来传递这些类型的对象 但我一生都找不到这样的
  • Inno Setup 从 .NET Framework 4.5(或更高版本)安装程序获取进度以更新进度栏位置

    我目前正在安装 NET Framework 4 6 2 作为先决条件PrepareToInstall事件函数 以便我可以获得退出代码 设置NeedsReboot状态 或者如果安装失败则中止 我的代码如下 一切正常 var PrepareTo
  • 如何在基于 Linux 的系统上的 C 程序中使用 mqueue?

    如何在基于 Linux 的系统上的 C 程序中使用 mqueue 消息队列 我正在寻找一些好的代码示例 可以展示如何以正确且正确的方式完成此操作 也许是一个操作指南 下面是一个服务器的简单示例 该服务器接收来自客户端的消息 直到收到告诉其停
  • Chrome + 另一个进程:进程间通信比 HTTP/XHR 请求更快?

    我有一个进程 1 对视频流进行实时图像处理 我需要在 Chrome 中的 HTML 页面中渲染该视频 同一台计算机上的进程 2 在canvas or img or videoHTML5 元素 由于我有 1000x1000 像素 x 3 字节
  • 创建进程的多个子进程并维护所有 PID 的共享数组

    我已经分叉了几次 并用 C 创建了一堆子进程 我想将它们所有的 PID 存储在一个共享数组中 PID 的顺序并不重要 例如 我创建了 32 个进程 我想要一个 32 个整数长的数组来存储每个 PID 并且每个进程都可以访问 最好的方法是什么
  • R -> kdb:将 R 数据作为二进制对象传递给 kdb+

    最有效的插入方式是什么R对象 更具体地说 时间序列表示为xts or data table对象 即基于时间和数字的列 到kdb 数据库 我能够通过以下方式找到唯一涉及字符串序列化的解决方案q所描述的表达式here https stackov
  • 如何停止 dbus gobject 循环

    我试图阻止gobject MainLoop 几秒钟后 我不知道是否可以为这种循环设置超时 这将是完美的 但我还没有找到 因此 我尝试通过线程来解决这个问题 但不幸的是 主循环阻塞了其他线程 这是我的代码 我正在使用 python 2 7 i
  • 使用 EOF 在未命名管道上发出信号

    我有一个测试程序 它使用使用 pipeline 创建的无名管道在 Linux 系统上使用 fork 创建的父进程和子进程之间进行通信 通常 当发送进程关闭管道的 write fd 时 接收进程从 read 返回值为 0 表示 EOF 然而
  • C# 中的 IPC 机制 - 用法和最佳实践

    不久前我在 Win32 代码中使用了 IPC 临界区 事件和信号量 NET环境下场景如何 是否有任何教程解释所有可用选项以及何时使用以及为什么 微软最近在IPC方面的东西是Windows 通信基础 http en wikipedia org

随机推荐

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

    一时忘了联合概率 边际概率 条件概率是怎么回事 回头看看 某离散分布 联合概率 边际概率 条件概率的关系 其中 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建