




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1.D-Bus介紹1.1D-Bus是什么D-Bus是一種本地進(jìn)程間通信的機(jī)制,支持點(diǎn)對(duì)點(diǎn)的通,以及廣播/訂閱式的通信方式.D-Bus將要傳輸?shù)臄?shù)據(jù)結(jié)構(gòu)化為二進(jìn)制數(shù)據(jù),包括不同長(zhǎng)度的整數(shù),浮點(diǎn)數(shù),字符串,復(fù)合類型等,D-Bus以消息為單位.而不是字節(jié)流.這是與tcp的差異.1.2D-Bus組成部分D-Bus有兩個(gè)主要組成部:1.點(diǎn)對(duì)點(diǎn)通信的支持庫2.Dbus服務(wù)進(jìn)程(其作用類似于總線,也稱之為總線,進(jìn)程可以連接到這個(gè)總線,并在總線上傳輸消息,一個(gè)進(jìn)程想要連接到總線,就需要支持庫提供的接口)1.3總線地址及連接每條總線都有總線地址,進(jìn)程可以這個(gè)地址連接到總線,總線地址類似于”/tmp/dbus_**”socket接口,但也有可能是TCP端口,對(duì)于應(yīng)用開發(fā)者來說,都會(huì)說客戶進(jìn)程打開并連接到總線.每個(gè)連接到總線的連接,我們稱之為對(duì)象,即每一個(gè)連接即一個(gè)對(duì)象.總線也是一個(gè)特殊的對(duì)象,總線對(duì)象本身提供了很多接口與方法.總線上每個(gè)連接都有名字,稱為busname,(也可以不設(shè)置連接名,比如你不需要提供服務(wù)),連接名都是由'.'分開的字符串組,比如hello.world.test,這個(gè)名字稱為公共名,對(duì)于每一個(gè)連接都有一個(gè)唯一連接名,用于標(biāo)識(shí)每一個(gè)連接.類似于dhcp一樣,域名與ip的對(duì)應(yīng)關(guān)系,也是多對(duì)一的關(guān)系.1.4總線,對(duì)象(接口,方法or信號(hào))關(guān)系如下一條總線可以連接多個(gè)對(duì)象一個(gè)對(duì)象可以有多個(gè)接口一個(gè)接口可以有多個(gè)方法.2.D-Bus支持庫常用接口2.1dbus_bus_get()原型:DBusConnection*dbus_bus_get(DBusBusTypetype,DBusError*error)Param1:總線類型Param2:錯(cuò)誤信息Return:DbusConnectionorNULLDesc:連接到busdaemon總線.2.2dbus_bus_request_name()原型:intdbus_bus_request_name(DBusConnection*connection,constchar*name,unsignedintflags,DBusError*error)Param1:connection連接描述符Param2:請(qǐng)求的busname,例如:hello.world.testParam3:flags(ALLOW_REPLACEMENT,REPLACE_EXISTING,DO_NOT_QUEUE)Param4:錯(cuò)誤信息Return:-1是錯(cuò)誤,(PRIMARY_OWNER,IN_QUEUE,EXISTS,ALREADY_OWNER)Desc:請(qǐng)求總線分配一個(gè)busname給這個(gè)連接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:錯(cuò)誤信息Desc:添加對(duì)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:阻塞,只能輸出消息隊(duì)列為空2.6dbus_connection_send()原型:dbus_bool_tdbus_connection_send(DBusConnection*connection,DBusMessage*message,dbus_uint32_t*serial)param1:connection連接描述符param2:填充的消息實(shí)體param3:發(fā)送消息的序列號(hào),應(yīng)該是為了多線程設(shè)計(jì)的2.7dbus_message_new_signal()原型:DBusMessage*dbus_message_new_signal(constchar*path,constchar*iface,constchar*name)param1:路徑param2:接口param3:信號(hào)名desc:初始化一個(gè)signal實(shí)體對(duì)象
(這里說明一下總線轉(zhuǎn)發(fā)步驟:對(duì)于signal來說,path->interface->signal,因?yàn)閟ignal是廣播的方式,所以不是必須指定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:初始化一個(gè)method實(shí)體對(duì)象(這里說明一下總線轉(zhuǎn)發(fā)步驟,對(duì)于method來說,bus_name->path->interface->signal,因?yàn)閷?duì)于method的來說是點(diǎn)對(duì)點(diǎn)的消息傳輸,所以必須指定busname)2.9dbus_message_iter_init_append()原型:voiddbus_message_iter_init_append(DBusMessage*message, DBusMessageIter*iter)Param1:消息對(duì)象Param2:參數(shù)對(duì)象Desc:初始化一個(gè)參數(shù)對(duì)象,且把參數(shù)對(duì)象追加在message之后2.10dbus_message_iter_append_basic()原型:dbus_bool_tdbus_message_iter_append_basic(DBusMessageIter*iter,inttype,constvoid*value)param1:參數(shù)對(duì)象param2:參數(shù)類型(TYPE_STRING,TYPE_SIGNATURE,TYPE_BOOLEAN,TYPE,TYPE_INT32…)param3:參數(shù)數(shù)值desc:添加一個(gè)基礎(chǔ)參數(shù)類型到參數(shù)對(duì)象中2.11dbus_connection_read_write()原型:dbus_bool_tdbus_connection_read_write(DBusConnection*connection, inttimeout_milliseconds)param1:connection描述符param2:超時(shí)時(shí)間return:TRUE連接狀態(tài),F(xiàn)ALSE為斷開狀態(tài)desc:從總線中讀消息,然后放入隊(duì)列中2.12dbus_connection_pop_message()原型:DBusMessage*dbus_connection_pop_message(DBusConnection*connection)Param1:connection連接描述符Return:返回消息對(duì)象,NULL為無消息Desc:從隊(duì)列中取出一條消息2.13dbus_message_is_signal()原型:dbus_bool_tdbus_message_is_signal(DBusMessage*message,constchar*iface,constchar*signal_name)param1:消息對(duì)象param2:接口名param3:信號(hào)名return:TRUE是指定的信號(hào),F(xiàn)ALSE相反desc:判斷是否為指定接口的信號(hào)名.2.14dbus_message_is_method_call()原型:dbus_bool_tdbus_message_is_method_call(DBusMessage*message,constchar*iface,constchar*method)param1:消息對(duì)象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:消息對(duì)象Param2:參數(shù)對(duì)象Return:FALSE是沒有參數(shù)Desc:解析message參數(shù)到參數(shù)對(duì)象中2.16dbus_message_iter_next()原型:dbus_bool_tdbus_message_iter_next(DBusMessageIter*iter)Param1:參數(shù)對(duì)象Return:FALSE為沒有下一個(gè)參數(shù),TRUE已移動(dòng)到下一個(gè)參數(shù)Desc:移動(dòng)到下一個(gè)參數(shù)2.17dbus_message_iter_has_next()原型:dbus_bool_tdbus_message_iter_has_next(DBusMessageIter*iter)Param1:參數(shù)對(duì)象Return:TRUE為還有參數(shù),F(xiàn)ALSE為沒有2.18dbus_message_iter_get_arg_type()原型:intdbus_message_iter_get_arg_type(DBusMessageIter*iter)Param1:參數(shù)對(duì)象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:消息對(duì)象param3:pending回調(diào),用于接收返回值或錯(cuò)誤消息param4:超時(shí)時(shí)間,-1為不限r(nóng)eturn:FALSE內(nèi)存不足desc:入隊(duì)消息,生成消息回調(diào)2.20dbus_pending_call_block()原型:voiddbus_pending_call_block(DBusPendingCall*pending)Param1:消息回調(diào)對(duì)象Desc:阻塞,直到收到返回消息,或者超時(shí).2.21dbus_pending_call_steal_reply()原型:DBusMessage*dbus_pending_call_steal_reply(DBusPendingCall*pending)Param1:回調(diào)對(duì)象Return:消息對(duì)象Desc:獲取一個(gè)消息對(duì)象,或者null附件:預(yù)備: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可能的問題:
有可能會(huì)提示找不dbus-arch-deps.h頭文件,在系統(tǒng)中搜一下,然后拷貝到/usr/include/dbus-1.0/dbus目錄運(yùn)行:./service& ./client3.D-BusDaemon啟動(dòng)3.1D-Busdaemon是什么Dbus-daemon是一個(gè)D-Bus消息總線daemon,它支持兩個(gè)應(yīng)用間一對(duì)一的通信.在系統(tǒng)啟動(dòng)之后.一般來講,有兩個(gè)dbusdaemon,一個(gè)為system,這是系統(tǒng)級(jí)權(quán)限,另一個(gè)session是用戶級(jí)權(quán)限.3.2systembus和sessionbusSystem類型總線配置文件位置:/etc/dbus-1/system.conf,一般來講,system類型總線通常被intscript啟動(dòng),大部分功能用于廣播事件,比如插撥設(shè)備Session類型總線配置文件位置:/etc/dbus-1/session.conf,一般來講,一個(gè)login用戶會(huì)擁有一個(gè).也可能多個(gè).SIGHUP信號(hào)導(dǎo)致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
針對(duì)每個(gè)登錄用戶,普通用戶(普通權(quán)限的dbusdaemon)--system
針對(duì)系統(tǒng)用戶,超級(jí)權(quán)限(有特權(quán)的dbusdaemon)--config-file=FILE
指定dbusdaemon相關(guān)配置文件位置--fork
讓dbusdaemon變?yōu)橐粋€(gè)daemon--nofork
--fork的反操作--print-address[=DESCRIPTOR]
打印出dbusdaemon監(jiān)聽地址--print-pid[=DESCRIPTOR]
打印出dbusdaemonpid--introspect
打印出dbusdaemon內(nèi)部實(shí)現(xiàn)的方法--address
設(shè)置監(jiān)聽
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年4月北京門頭溝龍泉鎮(zhèn)城市協(xié)管員招聘1人考前自測(cè)高頻考點(diǎn)模擬試題及答案詳解(典優(yōu))
- 2025甘肅天水市第四人民醫(yī)院編外人員招聘3人模擬試卷及答案詳解(名師系列)
- 2025安徽黃山市黃山區(qū)消防救援大隊(duì)政府專職消防員招聘2人模擬試卷附答案詳解(黃金題型)
- 2025年甘肅省張掖市市直醫(yī)療衛(wèi)生單位招聘專業(yè)技術(shù)人員考前自測(cè)高頻考點(diǎn)模擬試題及一套參考答案詳解
- 2025北方工業(yè)大學(xué)社區(qū)衛(wèi)生服務(wù)站招聘1人考前自測(cè)高頻考點(diǎn)模擬試題及答案詳解(全優(yōu))
- 2025年臨沂市農(nóng)業(yè)學(xué)校公開招聘教師(8名)考前自測(cè)高頻考點(diǎn)模擬試題及完整答案詳解1套
- 2025北京中國(guó)音樂學(xué)院高層次人才引進(jìn)2人模擬試卷參考答案詳解
- 2025江蘇蘇州市吳江區(qū)引進(jìn)教育重點(diǎn)緊缺人才12人考前自測(cè)高頻考點(diǎn)模擬試題參考答案詳解
- 2025杭州臨安區(qū)教育局公開招聘中小學(xué)教師76人考前自測(cè)高頻考點(diǎn)模擬試題及答案詳解(必刷)
- 2025年高純超細(xì)氧化硅纖維項(xiàng)目合作計(jì)劃書
- 2025呼和浩特市總工會(huì)社會(huì)工作者、專職集體協(xié)商指導(dǎo)員招聘29人考試參考題庫及答案解析
- 2025年礦業(yè)權(quán)評(píng)估師考試(礦業(yè)權(quán)評(píng)估地質(zhì)與礦業(yè)工程專業(yè)能力)全真沖刺試題及答案
- 【公開課】?jī)煞N電荷-2025-2026學(xué)年物理人教版(2024)九年級(jí)全一冊(cè)
- 2025年秋招:人力資源專員筆試題庫及答案
- 汽車發(fā)動(dòng)機(jī)課件
- 一節(jié)好課的標(biāo)準(zhǔn)簡(jiǎn)短課件
- 殯葬行業(yè)專業(yè)知識(shí)培訓(xùn)課件
- 直播游戲基礎(chǔ)知識(shí)培訓(xùn)
- 德清縣福曜洗滌有限公司年產(chǎn)100萬套牛仔服裝項(xiàng)目環(huán)境影響報(bào)告表
- 重慶市城市建設(shè)投資(集團(tuán))有限公司招聘筆試題庫2025
- (正式版)DB44∕T 2685-2025 《尾礦庫注銷工程安全設(shè)計(jì)導(dǎo)則》
評(píng)論
0/150
提交評(píng)論