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
并请联系谭海燕本人或者前往谭海燕个人主页留言

 

目录
相关文章
|
8月前
|
数据可视化 数据库
|
1月前
编程题小练
编程题小练
29 0
|
7月前
|
算法 C++
2023_7_21编程题
2023_7_21编程题
45 0
|
11月前
|
Linux
linux模块化编程
linux模块化编程
237 0
|
JavaScript 前端开发 Java
|
程序员
编程会是你自由职业的一种选择吗
欢迎来到我的小院,前几天有个曾经我带过小弟问我,大侠我最近想从事自由职业,你能帮我参谋参谋嘛,我很高兴他来咨询我。思考后,我写了这段建议,希望可以帮助到他,同时也能给想从事自由职业的年轻人一些参考。
编程会是你自由职业的一种选择吗
|
JavaScript 前端开发
编程题:为什么最后一个a是1不是5
前段时间有人在知乎上邀请我回答一个问题:为什么最后一个 a 是 1 不是 5?[1]
225 0
编程题:为什么最后一个a是1不是5
|
程序员 Ruby
松本行弘:我的编程人生
松本行弘:我的编程人生
217 0
松本行弘:我的编程人生
|
程序员 测试技术 API
循序渐进学编程
软件开发人员是一个日新月异的领域—–IT中的大师,今天的编程方式与明天的编程或许截然不同,技术在不断地革新,新语言、新平台的如雨后春笋般出现、更好的解决方案的冒出,因此我们需要跟得上节奏,我们别无选择,唯有努力提高自己。
130 0
循序渐进学编程