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