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

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