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.
版權申明:
轉載文章請注明原文出處https://blog.csdn.net/feiyinzilgd/archive/2010/12/17/6081914.aspx
並請聯係譚海燕本人或者前往譚海燕個人主頁留言
最後更新:2017-04-02 06:51:32