linux - 基于D-Bus的IPC通讯

D-Bus简介

  • 支持进程间一对一和多对多的对等通信, 在多对多情况需要后台进程去分转消息
  • 后台进程充当着一个路由器的角色
  • 在DBUS通信过程中,存在一个后台进程(BUS Daemon Process), 后台进程和普通进程间信息交互是通过域套接字进行通信
  • 连接到总线的进程可通过总线接收或传递消息,总线收到消息时,根据不同的消息类型进行不同的处理, DBUS中消息分为四类:
    (1) Methodcall消息:将触发一个函数调用 ;
    (2) Methodreturn消息:触发函数调用返回的结果 ;
    (3) Error消息:触发的函数调用返回一个异常 ;
    (4) Signal消息:通知,可以看作为事件消息 ;
  • DBus 处理流程如下
    在这里插入图片描述

D-Bus是用于进程间通信(IPC)的系统。从体系结构上讲,它分为几层:

  • libdbus,该库允许两个应用程序相互连接并交换消息
  1. 支持一对一连接
  • 消息总线守护程序(基于libdbus构建)
  1. 多个应用程序可以连接到该可执行文件
  2. 守护程序可以将消息从一个应用程序路由到其他应用程序
  3. 守护程序构成了一个轮毂。轮毂的每个辐条都是使用libdbus与应用程序的一对一连接。应用程序通过其分支将消息发送到总线守护程序,然后总线守护程序将消息转发到其他已连接的应用程序。将守护程序视为路由器。
  • 包装库或基于特定应用程序框架的绑定, 如 libdbus-glib和libdbus-qt。
  1. 简化了D-Bus编程的细节
  2. libdbus 大部分的API仅用于绑定

D-Bus 应用

D-Bus设计用于两种特定情况:

  1. 同一桌面会话中桌面应用程序之间的通信;以允许整个桌面会话的集成,并解决流程生命周期的问题(桌面组件何时启动和停止运行).
  2. 桌面会话与操作系统之间的通信,其中操作系统通常包括内核以及任何系统守护程序或进程 .

D-Bus 信号

  1. DBus中的信号包含一条消息,该消息由一个进程发送到任意数量的其他进程。即,信号是单向广播。该信号可能包含自变量(数据有效负载),由于是广播,因此它永远不会有“返回值”, 将此与方法调用进行对比,其中方法调用消息具有匹配的方法回复消息。
  2. 信号的发射器不知道信号接收器。收件人在总线守护程序中注册,以根据“匹配规则”接收信号 - 这些规则通常包括发送方和信号名称。总线守护程序仅将每个信号发送给已对该信号表示兴趣的收件人。

D-Bus 方法调用

  • 由两条消息组成
  1. 从过程A发送到过程B的方法调用消息
  2. 从过程B发送到过程A的匹配方法应答消息
  • 调用和应答消息都通过总线守护程序路由, 呼叫者在每个呼叫消息中都包含一个不同的序列号,而回复消息中包含此号码,以使呼叫者能够将对呼叫的答复进行匹配。
  • 方法调用消息发送到总线守护程序, 总线守护程序查看目标总线名称。如果某个进程拥有该名称,则总线守护程序会将方法调用转发给该进程。否则,总线守护程序将创建一条错误消息,并将其作为对方法调用消息的答复发送回去。

DBus框架描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Linux系统提供了各种系统调用API用于进程之间的通信:    无名管道PIPE    命名管道FIFO    消息队列    共享内存    信号量    文件锁    信号signal....其中还包括system V和POSIX 两种接口标准,除此之外,Linux系统自身还扩展了自己的一套API接口用于进程间通信,比如signalfd、timerfd、eventfd等。本视频教程为《Linux系统编程》第05期,本期课程将会带领大家学习Linux下将近15种进程间通信IPC工具的使用,了解它们的通信机制、编程实例、使用场景、内核中的实现以及各自的优缺点。本课程会提供PDF版本的PPT课件和代码,学员购买课程后可到课程主页自行下载嵌入式自学路线指导图:------------------------------------------------------------------------------------------------------                   《嵌入式工程师自我修养》嵌入式自学系列教程                                          作者:王利涛------------------------------------------------------------------------------------------------------一线嵌入式工程师精心打造,嵌入式学习路线六步走: 第 1 步:Linux三剑客零基础玩转Linux+UbuntuGit零基础实战:Linux开发技能标配vim从入门到精通基础篇:零基础学习vim基本命令vim从入门到精通定制篇:使用插件打造嵌入式开发IDEmakefile工程实践基础篇:从零开始一步一步写项目的Makefilemakefile工程实践第2季:使用Autotools自动生成Makefile软件调试基础理论printf打印技巧Linux内核日志与打印使用QEMU搭建u-boot+Linux+NFS嵌入式开发环境第 2 步:C语言嵌入式Linux高级编程第1期:C语言进阶学习路线指南第2期:计算机架构与ARM汇编程序设计第3期:程序的编译、链接和运行原理第4期:堆栈内存管理第6期:数据存储与指针第7期:嵌入式数据结构与Linux内核的OOP思想第8期:C语言的模块化编程第9期:CPU和操作系统入门      搞内核驱动开发、光会C语言是不行的!      你还需要学习的有很多,包括:计算机体系架构、ARM汇编、程序的编译链接运行原理、CPU和操作系统原理、堆栈内存管理、指针、linux内核中的面向对象思想、嵌入式系统架构、C语言的模块化编程.....第 3 步:Linux系统编程第00期:Linux系统编程入门第01期:揭开文件系统的神秘面纱第02期:文件I/O编程实战第03期:I/O缓存与内存映射第04期:打通进程与终端的任督二脉第05期:进程间通信-------------------we are here!‍    第 4 步:Linux内核编程‍    练乾坤大挪移,会不会九阳神功,是一道坎。搞驱动内核开发,懂不懂内核也是一道坎。第 5 步:嵌入式驱动开发    芯片原理、datasheet、硬件电路、调试手段、总线协议、内核机制、框架流程....第 6 步:项目实战    嵌入式、嵌入式人工智能、物联网、智能家居...
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值