QtDBus编程详解(一)

简介:

                                                       QtDBus编程详解(一)

DBus的出现,使得Linux进程间通信更加便捷,不仅可以和用户空间应用程序进行通信,而且还可以和内核的程序进行通信,可以说DBus使得Linux变得更加智能,更加具有交互性。我们可以把DBus看做是一个消息总线(bus)
 
首先介绍DBus的几个重要的基本概念。

具体的QDBus编程以及通信将在QtDBus编程详解(二)中进行详细介绍
 
DBus分为两种类型:
system bus(系统总线):用于系统(Linux)和用户程序之间进行通信和消息的传递。
session bus(回话总线):用于桌面(e.g. GNOME, KDE....)用户程序之间进行通信。一般我们用到的就是session bus。
这在我们建立于DBus总线的连接时需要选择,选择建立system bus连接或者session bus连接。
无论是system bus还是session bus,都不需要我们自己写,随着DBus的重大影响和作用,所有的Linux系统都支持DBus,而且DBus总线(system bus, session bus)都会以demon守护进程伴随系统一起启动。我们所要做的就是做相关的处理然后连接到总线上。
 
object path
在我们通常C++中,都会有object这个概念,用类创建一个实例就是一个object。在DBus通信中,这种由类定义的object叫native object。在DBus通信中,将一个object(native, remote)对象和一个路径绑定,当我们需要和该native object通信的时候,我们只需要吧消息发送到该路径。这个路径就叫object path。正因为是路径,所以object的格式斜杠作为分隔(/object/example)
 
DBus name
总线名,这是对每一个连接到Dbus上的连接进行标示。每一个连接到session ,system bus的连接也叫做Dbus。当创建连接成功之后,系统会给该总线分配一个唯一的名称,这个unique name通常是以":"开头,比如 :45-7等等。类比:DBus name 好比IP地址。
 Service name
服务名称。即DBus上提供的服务的名称。一个DBus可以提供多种服务。类比:hostname。
DBus通信的时候,连接到DBus之后,需要向系统注册服务,告知系统,我需要向外界提供何种服务。Service name是以点作为分隔(org.demo.myservice)

Interface
接口。在DBus中,interface类比于C++中的namespace。Interface内部是一些列的method和signal.这些method和signal都可以通过DBus通信发送消息进行调用。

以上概念看起来很模糊。我写了一个简单的DBus通信程序,并用工具对系统中的DBus进行观察。

 


 

 

 

 

 

我创建了一个DBus连接,系统分配的unique name名称是:(:1.93)
我创建了两个Server:
org.feiyinzilgd.DBusExample.one
org.feiyinzilgd.DBusExample.two
这两个service的DBus unique name都是(:1.93)
即:一个DBus总线上,提供了两个服务。

有两个Object path:
/
/Car

 

 

 

Object path提供了很多interface,例如:com.trolltech.Examples.Carinterface.
该interface下面提供了一些列的methods和signal.

 

 

 


 

版权申明:
转载文章请注明原文出处http://blog.csdn.net/feiyinzilgd/archive/2010/12/17/6081914.aspx
并请联系谭海燕本人或者前往谭海燕个人主页留言

 

目录
相关文章
|
9月前
|
安全 Windows
电脑系统崩溃,文件还在吗?
电脑系统崩溃后,数据未必丢失。多数情况是系统文件或逻辑错误导致无法访问,只要硬盘无物理损坏,数据通常仍存在。本文介绍三种实用数据恢复方法:拆硬盘读取、用WinPE启动恢复、使用数据恢复软件,并提供系统修复技巧与常见误区提醒,助你安全恢复文件、重建系统环境。
|
开发者 C# 自然语言处理
WPF开发者必读:掌握多语言应用程序开发秘籍,带你玩转WPF国际化支持!
【8月更文挑战第31天】随着全球化的加速,开发多语言应用程序成为趋势。WPF作为一种强大的图形界面技术,提供了优秀的国际化支持,包括资源文件存储、本地化处理及用户界面元素本地化。本文将介绍WPF国际化的实现方法,通过示例代码展示如何创建和绑定资源文件,并设置应用程序语言环境,帮助开发者轻松实现多语言应用开发,满足不同地区用户的需求。
442 0
如何在 Arduino 中使用 PWM
PWM(脉冲宽度调制)是 Arduino 中常用的技术,用于控制电机速度、LED 亮度等。通过设置数字引脚的 `analogWrite()` 函数,可以生成不同占空比的 PWM 信号,实现精确控制。
2474 2
|
网络虚拟化 Windows
Windows 10 Windows1011出现0x80190001错误解决方案! Windows微软账户无法登录问题 Microsoft Store商店用不了
Windows 10 Windows1011出现0x80190001错误解决方案! Windows微软账户无法登录问题 Microsoft Store商店用不了
1196 1
|
JavaScript
vue3表格编辑(数据回显)和删除功能实现
vue3表格编辑(数据回显)和删除功能实现
428 1
|
机器学习/深度学习 存储 人工智能
生成式 AI 与 LangCHain(二)(3)
生成式 AI 与 LangCHain(二)
934 3
|
关系型数据库 MySQL 数据库
MySQL GTID 主从复制错误修复方法
GTID 复制错误修复方法
9628 0
|
安全 Java 数据安全/隐私保护
Android和iOS应用程序加固方法详解:混淆、加壳、数据加密、动态加载和数字签名实现
Android和iOS应用程序加固方法详解:混淆、加壳、数据加密、动态加载和数字签名实现
562 0
|
前端开发 JavaScript iOS开发
灵动岛前端Ui
灵动岛前端Ui
|
自然语言处理 数据可视化 定位技术
使用ChatGPT+Python进行科研绘图
使用ChatGPT+Python进行科研绘图
1266 0