dbus是freedesktop下開源的Linux IPC通信機(jī)制,本身Linux 的IPC通信機(jī)制包括,管道(fifo),共享內(nèi)存,信號(hào)量,消息隊(duì)列,Socket等。 像現(xiàn)在流行的moblin平臺(tái)就使用了DBUS通信,還有我最近看的bluez 4 也是通過DBUS來交互的。
它是個(gè)3層架構(gòu)的進(jìn)程間通信系統(tǒng),包括:
1. 函數(shù)庫libdbus,用于兩個(gè)應(yīng)用程序呼叫聯(lián)系和交互消息。
2. Message bus daemon,總線守護(hù)進(jìn)程可同時(shí)與多個(gè)應(yīng)用程序相連,并能把來自一個(gè)應(yīng)用程序的消息路由到0或者多個(gè)其他程序。
3. 一系列基于特定應(yīng)用程序框架的Wrapper庫。 比如libdbus-glib, libdbus-python.
參看圖1-1, Bus Daemon Process就是運(yùn)行在linux的daemon(dbus-daemon, 用戶可以在/etc/init.d/dbus 操作,stop, start等等), dbus-daemon運(yùn)行時(shí)會(huì)調(diào)用libdus的庫。 在Application Process1里面就是應(yīng)用層的東西了,應(yīng)用程序調(diào)用特定的應(yīng)用程序框架的Wrapper庫與dbus-daemon進(jìn)行通信。
我前段時(shí)間就是用Python寫程序與dbus-daemon通信,所以就需要libdbus-python,后來又用c寫程序,又裝了libdus-glib。實(shí)質(zhì)上在dbus主頁上(http://www.freedesktop.org/wiki/Software/dbus)提供了很多Wrapper庫, for QT4, JAVA, Perl, C++, Pascal, QT3, .NET, Ruby等等。這個(gè)Wrapper庫呢其實(shí)就是對(duì)dbus下層調(diào)用做了封裝,給上層暴露一個(gè)友好的接口。dbus的底層其實(shí)也是通過socket通信的

圖 1-1
我再給一張bluez的例子讓大家更理解dbus; 有四個(gè)應(yīng)用想與bluz的damon通信,bluez注冊(cè)到dbus中,其它的應(yīng)用只需要向dbus要bluez的數(shù)據(jù),
dbus負(fù)責(zé)再和bluez溝通了,但是bluez一定要把接口告訴其它應(yīng)用。
理解有限,先說到這。