http://blog.mcuol.com/User/AT91RM9200/Article/12816_1.htm
http://www.cnblogs.com/wzh206/archive/2010/05/13/1734901.html
一個完整的DBus學習教程(強烈推薦,寫得相當的全):
http: " /> 麻豆导航,小明在看看永久免费平台,黄色片中文

一区二区久久-一区二区三区www-一区二区三区久久-一区二区三区久久精品-麻豆国产一区二区在线观看-麻豆国产视频

DBus學習筆記

一些基本概念的解釋和翻譯:
http://blog.mcuol.com/User/AT91RM9200/Article/12816_1.htm
http://www.cnblogs.com/wzh206/archive/2010/05/13/1734901.html
一個完整的DBus學習教程(強烈推薦,寫得相當的全):
http://blog.csdn.NET/fmddlmyy/archive/2008/12/23/3585730.ASPx
兩個DBus的完整示例,相當有參考價值
http://blog.chinaunix.NET/u1/58649/showart_462468.html
http://hi.baidu.com/zengzhaonong/blog/item/670b98d6e63ae42c07088bae.html
DBus官方網站,最原滋原味的DBus學習內容
http://www.freedesktop.org/wiki/Software/dbus
http://dbus.freedesktop.org/doc/dbus-tutorial.html
http://dbus.freedesktop.org/doc/dbus-specification.html
歡迎大家提供更多的DBus學習資料,一起研究

 

DBus是一種IPC機制,由freedesktop.org項目提供,使用GPL許可證發行,用于進程間通信或進程與內核的通信。
:Linux中的IPC通信機制還包括,管道(fifo),共享內存,信號量,消息隊列,Socket等。
DBus進程間通信主要有三層架構
1.底層接口層:主要是通過libdbus這個函數庫,給予系統使用DBus的能力。
2.總線層:主要Message bus daemon這個總線守護進程提供的,在Linux系統啟動時運行,負責進程間的消息路由和傳遞,其中包括Linux內核和Linux桌面環境的消息傳遞。總線守護進程可同時與多個應用程序相連,并能把來自一個應用程序的消息路由到0或者多個其他程序。
3.應用封裝層:通過一系列基于特定應用程序框架將DBus的底層接口封裝成友好的Wrapper庫,供不同開發人員使用(DBus官方主頁http://www.freedesktop.org/wiki/Software/dbus,提供了大部分編程語言的DBus庫版本)。比如libdbus-glib, libdbus-Python.

 

如上圖所示,Bus Daemon Process是運行在linux系統中的一個后臺守護進程,dbus-daemon運行時會調用libdus的庫。Application Process1代表的就是應用程序進程,通過調用特定的應用程序框架的Wrapper庫與dbus-daemon進行通信。
從上圖也可以看出來Application和Daemon中其實還是通過socket進行通行。

DBus的三大優點:低延遲,低開銷,高可用性。

*低延遲:DBus一開始就是用來設計成避免來回傳遞和允許異步操作的。因此雖然在Application和Daemon之間是通過socket實現的,但是又去掉了socket的循環等待,保證了操作的實時高效。

*低開銷:DBus使用一個二進制的協議,不需要轉化成像XML這樣的文本格式。因為DBus是主要用來機器內部的IPC,而不是為了網絡上的IPC機制而準備的.所以它才能夠在本機內部達到最優效果。

*高可用性:DBus是基于消息機制而不是字節流機制。它能自動管理一大堆困難的IPC問題。同樣的,DBus庫被設計來讓程序員能夠使用他們已經寫好的代碼。而不會讓他們放棄已經寫好的代碼,被迫通過學習新的IPC機制來根據新的IPC特性重寫這些代碼。

 

在介紹基本概念之前,先介紹一個學習DBus的好工具d-feet,這個工具主要是用來查看DBus的System Bus和Session Bus中的各個消息連接的。當然,你也可以在這里面添加自己創建的消息總線,以便于觀察。

 

下面根據上圖介紹一下DBus中的一些基本概念。

會話總線(Session Buses普通進程創建,可同時存在多條。會話總線屬于某個進程私有,它用于進程間傳遞消息。

系統總線(System Bus在引導時就會啟動,它由操作系統和后臺進程使用,安全性非常好,以使得任意的應用程序不能欺騙系統事件。當然,如果一個應用程序需要接受來自系統總線的消息,他也可以直接連接到系統總線中,但是他能發送的消息是受限的。

Bus Name按字面理解為總線名稱貌似不是很貼切,應該是一個連接名稱,主要是用來標識一個應用和消息總線的連接。從上圖可以看出來,總線名稱主要分為兩類

"org.kde.StatusNotifierWatcher"這種形式的稱為公共名(well-knownname)

":1.3"這種形式的稱為唯一名(Unique Name)

公共名提供眾所周知的服務。其他應用通過這個名稱來使用名稱對應的服務。可能有多個連接要求提供同個公共名的服務,即多個應用連接到消息總線,要求提供同個公共名的服務。消息總線會把這些連接排在鏈表中,并選擇一個連接提供公共名代表的服務。可以說這個提供服務的連接擁有了這個公共名。如果這個連接退出了,消息總線會從鏈表中選擇下一個連接提供服務。

唯一名以“:”開頭,“:”后面通常是圓點分隔的兩個數字,例如“:1.0”。每個連接都有一個唯一名。在一個消息總線的生命期內,不會有兩個連接有相同的唯一名。擁有公眾名的連接同樣有唯一名,例如在前面的圖中,“org.kde.StatusNotifierWatcher”的唯一名是“:1.51”。

每個連接都有一個唯一名,但不一定有公共名。

只有唯一名而沒有公共名叫做私有連接,因為它們沒有提供可以通過公共名訪問的服務。

Object Paths

“org.kde.StatusNotifierWatcher”這個連接中有三個Object Paths,標識這這個連接中提供了三個不同的服務,每個Object Paths表示一個服務。這個路徑在連接中是唯一的。

Interfaces

在每個Object Paths下都包含有多個接口(Interfaces),舉例如下接口:

org.freedesktop.DBus.Introspectable

org.freedesktop.DBus.Properties

org.kde.StatusNotifierWatcher

紅色的兩個是消息總線提供的標準接口,而剩下的一個是需要具體的應用去實現的。

MethodsSignals

Methods表示可以被具體調用的方法

Signals則表示的是信號,此信號可以被廣播,而連接了這個信號的對象在接收到信號時就可以進行相應的處理。和Qt中的信號應該是一個意思。

it知識庫DBus學習筆記,轉載需保留來源!

鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。

主站蜘蛛池模板: 一级女人毛片 | 在线综合亚洲欧美网站天堂 | 久久国产精品高清一区二区三区 | 国产成人精品一区 | 亚洲香蕉伊在人在线观看9 亚洲香蕉伊综合在人在线 亚洲香蕉影院 | 久久精品中文字幕有码日本 | 日本一区二区高清免费不卡 | 狠狠综合久久综合88亚洲日本 | 久久伊人影视 | 97高清国语自产拍中国大陆 | 天天色综 | 69日本xxxxx色护士 | 99热影院 | 九九大香尹人视频免费 | 中文不卡视频 | 色综合视频一区二区三区 | 日本一区二区三区免费观看 | 国产亚洲视频在线播放大全 | 一区精品麻豆入口 | 五月六月激情 | 九九视频在线看精品 | 亚洲精品国产成人专区 | 中文字幕123 | 亚洲国产高清精品线久久 | 无码精品一区二区三区免费视频 | 黄色美女免费看 | 狠狠综合久久综合88亚洲日本 | 六月婷婷久香在线视频 | 久久精品国产精品青草不卡 | 国产美女在线精品免费观看 | 国产xx肥老妇视频奂费 | 五月婷婷开心 | 美女免费黄色 | 日本人videos18videos在线看 | 亚洲综合偷自成人网第页色 | 国产播放器一区 | 国产成人亚洲综合一区 | 免费精品一区二区三区第35 | 亚洲精品午夜视频 | 久久久精品免费 | 91成人网 |