QtDBus程式設計詳解 一

2021-05-23 21:30:00 字數 1724 閱讀 4733

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)

inte***ce

介面。在dbus中,inte***ce模擬於c++中的namespace。inte***ce內部是一些列的method和signal.這些method和signal都可以通過dbus通訊傳送訊息進行呼叫。

以上概念看起來很模糊。我寫了乙個簡單的dbus通訊程式,並用工具對系統中的dbus進行觀察。

我建立了乙個dbus連線,系統分配的unique name名稱是:(:1.93)

我建立了兩個server:

org.feiyinzilgd.dbu***ample.one

org.feiyinzilgd.dbu***ample.two

這兩個service的dbus unique name都是(:1.93)

即:乙個dbus匯流排上,提供了兩個服務。

有兩個object path:

//car

object path提供了很多inte***ce,例如:com.trolltech.examples.carinte***ce.

該inte***ce下面提供了一些列的methods和signal.

QtDBus程式設計詳解 二

qtdbus程式設計詳解 二 qtdbus通訊,就必須有服務端和客戶端 關鍵是弄清楚哪一端是server,哪一端是client 我們先來看看,qtdbus通訊,server和client需要做些什麼工作。server 1.申請乙個匯流排連線,連線到system dbus或者是session dbus...

Execl程式設計詳解

一 使用動態建立的方法 首先建立 excel 物件,使用comobj 1 顯示當前視窗 2 更改 excel 標題欄 3 新增新工作簿 4 開啟已存在的工作簿 5 設定第2個工作表為活動工作表 或 6 給單元格賦值 7 設定指定列的寬度 單位 字元個數 以第一列為例 8 設定指定行的高度 單位 磅 ...

PHP Socket 程式設計詳解

最近在做的專案有一項需要耗時任務在後台執行的功能,雖然php並不是非常適合做常駐後台的守護程序,但是由於專案主要 都是基於php實現,如 果執行在後台的守護程序改換別的語言會非常不方便。所以不可避免會涉及到web端和daemon部分的通訊,socket是乙個不錯的方式。socket的英文原義是 孔 ...