dbus 使用介紹完整_第1頁
dbus 使用介紹完整_第2頁
dbus 使用介紹完整_第3頁
dbus 使用介紹完整_第4頁
dbus 使用介紹完整_第5頁
已閱讀5頁,還剩4頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

1.D-Bus介紹1.1D-Bus是什么D-Bus是一種本地進程間通信的機制,支持點對點的通,以及廣播/訂閱式的通信方式.D-Bus將要傳輸?shù)臄?shù)據(jù)結(jié)構化為二進制數(shù)據(jù),包括不同長度的整數(shù),浮點數(shù),字符串,復合類型等,D-Bus以消息為單位.而不是字節(jié)流.這是與tcp的差異.1.2D-Bus組成部分D-Bus有兩個主要組成部:1.點對點通信的支持庫2.Dbus服務進程(其作用類似于總線,也稱之為總線,進程可以連接到這個總線,并在總線上傳輸消息,一個進程想要連接到總線,就需要支持庫提供的接口)1.3總線地址及連接每條總線都有總線地址,進程可以這個地址連接到總線,總線地址類似于”/tmp/dbus_**”socket接口,但也有可能是TCP端口,對于應用開發(fā)者來說,都會說客戶進程打開并連接到總線.每個連接到總線的連接,我們稱之為對象,即每一個連接即一個對象.總線也是一個特殊的對象,總線對象本身提供了很多接口與方法.總線上每個連接都有名字,稱為busname,(也可以不設置連接名,比如你不需要提供服務),連接名都是由'.'分開的字符串組,比如hello.world.test,這個名字稱為公共名,對于每一個連接都有一個唯一連接名,用于標識每一個連接.類似于dhcp一樣,域名與ip的對應關系,也是多對一的關系.1.4總線,對象(接口,方法or信號)關系如下一條總線可以連接多個對象一個對象可以有多個接口一個接口可以有多個方法.2.D-Bus支持庫常用接口2.1dbus_bus_get()原型:DBusConnection*dbus_bus_get(DBusBusTypetype,DBusError*error)Param1:總線類型Param2:錯誤信息Return:DbusConnectionorNULLDesc:連接到busdaemon總線.2.2dbus_bus_request_name()原型:intdbus_bus_request_name(DBusConnection*connection,constchar*name,unsignedintflags,DBusError*error)Param1:connection連接描述符Param2:請求的busname,例如:hello.world.testParam3:flags(ALLOW_REPLACEMENT,REPLACE_EXISTING,DO_NOT_QUEUE)Param4:錯誤信息Return:-1是錯誤,(PRIMARY_OWNER,IN_QUEUE,EXISTS,ALREADY_OWNER)Desc:請求總線分配一個busname給這個連接2.3dbus_bus_add_match()原型:voiddbus_bus_add_match(DBusConnection*connection,constchar*rule,DBusError*error)Param1:connection連接描述符Param2:rule添加一些匹配規(guī)則,例如"type=signalortype=methodorinterface=hello.world.test"Param3:錯誤信息Desc:添加對connection的一些匹配規(guī)則2.4dbus_bus_remove_match()Add_match()的反操作原型:voiddbus_bus_remove_match(DBusConnection*connection,constchar*rule,DBusError*error);2.5dbus_connection_flush()原型:voiddbus_connection_flush(DBusConnection*connection)Param1:connection連接描述符Desc:阻塞,只能輸出消息隊列為空2.6dbus_connection_send()原型:dbus_bool_tdbus_connection_send(DBusConnection*connection,DBusMessage*message,dbus_uint32_t*serial)param1:connection連接描述符param2:填充的消息實體param3:發(fā)送消息的序列號,應該是為了多線程設計的2.7dbus_message_new_signal()原型:DBusMessage*dbus_message_new_signal(constchar*path,constchar*iface,constchar*name)param1:路徑param2:接口param3:信號名desc:初始化一個signal實體對象

(這里說明一下總線轉(zhuǎn)發(fā)步驟:對于signal來說,path->interface->signal,因為signal是廣播的方式,所以不是必須指定busname.)2.8dbus_message_new_method_call()原型:DBusMessage*dbus_message_new_method_call(constchar*destination,constchar*path,constchar*iface,constchar*method)param1:目的busnameparam2:路徑param3:接口param4:方法名desc:初始化一個method實體對象(這里說明一下總線轉(zhuǎn)發(fā)步驟,對于method來說,bus_name->path->interface->signal,因為對于method的來說是點對點的消息傳輸,所以必須指定busname)2.9dbus_message_iter_init_append()原型:voiddbus_message_iter_init_append(DBusMessage*message, DBusMessageIter*iter)Param1:消息對象Param2:參數(shù)對象Desc:初始化一個參數(shù)對象,且把參數(shù)對象追加在message之后2.10dbus_message_iter_append_basic()原型:dbus_bool_tdbus_message_iter_append_basic(DBusMessageIter*iter,inttype,constvoid*value)param1:參數(shù)對象param2:參數(shù)類型(TYPE_STRING,TYPE_SIGNATURE,TYPE_BOOLEAN,TYPE,TYPE_INT32…)param3:參數(shù)數(shù)值desc:添加一個基礎參數(shù)類型到參數(shù)對象中2.11dbus_connection_read_write()原型:dbus_bool_tdbus_connection_read_write(DBusConnection*connection, inttimeout_milliseconds)param1:connection描述符param2:超時時間return:TRUE連接狀態(tài),F(xiàn)ALSE為斷開狀態(tài)desc:從總線中讀消息,然后放入隊列中2.12dbus_connection_pop_message()原型:DBusMessage*dbus_connection_pop_message(DBusConnection*connection)Param1:connection連接描述符Return:返回消息對象,NULL為無消息Desc:從隊列中取出一條消息2.13dbus_message_is_signal()原型:dbus_bool_tdbus_message_is_signal(DBusMessage*message,constchar*iface,constchar*signal_name)param1:消息對象param2:接口名param3:信號名return:TRUE是指定的信號,F(xiàn)ALSE相反desc:判斷是否為指定接口的信號名.2.14dbus_message_is_method_call()原型:dbus_bool_tdbus_message_is_method_call(DBusMessage*message,constchar*iface,constchar*method)param1:消息對象param2:接口名param3:方法名return:TRUE是指定的方法,F(xiàn)ALSE相反desc:判斷是否為指定接口的方法名.2.15dbus_message_iter_init()原型:dbus_bool_tdbus_message_iter_init(DBusMessage*message, DBusMessageIter*iter)Param1:消息對象Param2:參數(shù)對象Return:FALSE是沒有參數(shù)Desc:解析message參數(shù)到參數(shù)對象中2.16dbus_message_iter_next()原型:dbus_bool_tdbus_message_iter_next(DBusMessageIter*iter)Param1:參數(shù)對象Return:FALSE為沒有下一個參數(shù),TRUE已移動到下一個參數(shù)Desc:移動到下一個參數(shù)2.17dbus_message_iter_has_next()原型:dbus_bool_tdbus_message_iter_has_next(DBusMessageIter*iter)Param1:參數(shù)對象Return:TRUE為還有參數(shù),F(xiàn)ALSE為沒有2.18dbus_message_iter_get_arg_type()原型:intdbus_message_iter_get_arg_type(DBusMessageIter*iter)Param1:參數(shù)對象Reuturn:參數(shù)類型Desc:獲取參數(shù)類型2.19dbus_connection_send_with_reply()原型:dbus_bool_tdbus_connection_send_with_reply(DBusConnection*connection,DBusMessage*message,DBusPendingCall**pending_return,inttimeout_milliseconds)param1:connection連接描述符param2:消息對象param3:pending回調(diào),用于接收返回值或錯誤消息param4:超時時間,-1為不限r(nóng)eturn:FALSE內(nèi)存不足desc:入隊消息,生成消息回調(diào)2.20dbus_pending_call_block()原型:voiddbus_pending_call_block(DBusPendingCall*pending)Param1:消息回調(diào)對象Desc:阻塞,直到收到返回消息,或者超時.2.21dbus_pending_call_steal_reply()原型:DBusMessage*dbus_pending_call_steal_reply(DBusPendingCall*pending)Param1:回調(diào)對象Return:消息對象Desc:獲取一個消息對象,或者null附件:預備:installlibdbus-1-devlibdbus-glib-1-dev編譯:gccclient.c–ldbus-1–I/usr/include/dbus-1.0–oclient gccservice.c–ldbus-1–I/usr/include/dbus-1.0–oservice可能的問題:

有可能會提示找不dbus-arch-deps.h頭文件,在系統(tǒng)中搜一下,然后拷貝到/usr/include/dbus-1.0/dbus目錄運行:./service& ./client3.D-BusDaemon啟動3.1D-Busdaemon是什么Dbus-daemon是一個D-Bus消息總線daemon,它支持兩個應用間一對一的通信.在系統(tǒng)啟動之后.一般來講,有兩個dbusdaemon,一個為system,這是系統(tǒng)級權限,另一個session是用戶級權限.3.2systembus和sessionbusSystem類型總線配置文件位置:/etc/dbus-1/system.conf,一般來講,system類型總線通常被intscript啟動,大部分功能用于廣播事件,比如插撥設備Session類型總線配置文件位置:/etc/dbus-1/session.conf,一般來講,一個login用戶會擁有一個.也可能多個.SIGHUP信號導致dbus-daemon重新去加載配置3.3dbus-daemon執(zhí)行參數(shù)dbus-daemon[--version][--session][--system][--config-file=FILE][--print-address[=DESCRIPTOR]][--print-pid[=DESCRIPTOR]][--fork][--nofork][--introspect][--address=ADDRESS][--systemd-activation][--nopidfile]--session

針對每個登錄用戶,普通用戶(普通權限的dbusdaemon)--system

針對系統(tǒng)用戶,超級權限(有特權的dbusdaemon)--config-file=FILE

指定dbusdaemon相關配置文件位置--fork

讓dbusdaemon變?yōu)橐粋€daemon--nofork

--fork的反操作--print-address[=DESCRIPTOR]

打印出dbusdaemon監(jiān)聽地址--print-pid[=DESCRIPTOR]

打印出dbusdaemonpid--introspect

打印出dbusdaemon內(nèi)部實現(xiàn)的方法--address

設置監(jiān)聽

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論