D-BUS是一個提供簡單的應用程式互相通訊的途徑的自由軟體項目,它是做為freedesktoporg項目的一部分來開發的。
基本介紹
- 中文名:D-Bus
- 隸屬:自由軟體項目
- 開發:freedesktoporg
- 類型:訊息匯流排系統
簡介,運作方式,架構,
簡介
D-Bus 允許程式在其上註冊以提供服務給其他的程式。同時他也提供客戶端程式查詢有哪些服務是可得的可能性。程式也可註冊以等待kernel的events比如說硬體的熱插拔。
D-Bus 以daemon的方式實現。使用者可以執行好幾個D-Bus的實體,每個實體被稱為一個channel。通常系統中會有一個特權的channel稱之為system channel,以及每個使用者擁有一個私有的實體。使用者需要私有的實體因為system channel將有存取的限制。
D-Bus受到了DCOP系統的影響而且在KDE 4中取代DCOP;他已經被集成在Qt 4, GNOME,Windows以及 Maemo 系統中。GNOME也逐漸的用它來取代了大部分的早期Bonobo機制。
System channel主要的功用在於傳遞HAL的訊息給對這些訊息感興趣的processes。而私有實體的功能在於提供程式間無限制的溝通。
運作方式
所有使用D-BUS的應用程式都包含一些對象,它們一般映射為GObject、QObject、C++對象、或者Python對象(也許不需要)。一個對象是一個實例而不是類型。當經由一個D-BUS連線受到一條訊息時,該訊息是被發往一個對象而不是整個應用程式。
為了允許訊息能指定接受對象,還要提供引用對象的方法。在你偏愛的程式語言中,它也許叫做指針或者引用。但是上述所謂引用一般實現為與應用程式相關的記憶體地址,因此無法在應用程式之間傳遞。
為了解決這一問題,D-BUS為每個對象引入名字。這些名字看起來像是檔案系統路徑,例如一個對象可能叫做“/org/kde/kspread/sheets/3/cells/4/5”。易讀的路徑名是受鼓勵的做法,但也允許使用諸如“/com/mycompany/c5yo817y0c1y1c5b”等,只要它可以為你的應用程式所用。
Namespacing的對象路徑以開發者所有的域名開始(如/org/kde)以避免系統不同代碼模組互相干擾。
架構
函式館libdbus,用於兩個應用程式呼叫聯繫和互動訊息。 一個基於libdbus構造的訊息,匯流排守護進程可同時與多個應用程式相連,並能把來自一個應用程式的訊息路由到0或者多個其他程式。 一系列基於特定應用程式框架的Wrapper庫。 D-BUS為了兩個特定情況而設計: