一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

linux下dbus的理解學(xué)習(xí)

 hewii 2022-09-20 發(fā)布于上海

有那么個(gè)組織叫freedesktop,它是專門為linux桌面制定標(biāo)準(zhǔn)的。什么KDE,GNOME都是按他的標(biāo)準(zhǔn)來(lái)的。而dbus是其中的桌面消息機(jī)制的一個(gè)標(biāo)準(zhǔn)。

dbus是一個(gè)IPC的管理系統(tǒng),其實(shí)就底層來(lái)說(shuō)就是本地socket通信。但是他是將所有的消息都通過(guò)總線的方式來(lái)管理分發(fā),易于管理和安全。

dbus一般就是3層結(jié)構(gòu):

1. libdbus庫(kù),允許兩個(gè)應(yīng)用相互連接交換消息
 2. 一個(gè)建立在libdbus上的消息總線守護(hù)程序,這個(gè)守護(hù)程序可以路由消息
 3. 封裝庫(kù),比如libdbus-glib或libdbus-qt。一般都是使用封裝庫(kù)來(lái)簡(jiǎn)化使用dbus的細(xì)節(jié)。

一般gtk(c語(yǔ)言)開(kāi)發(fā)的話,可以使用gobject-dbus庫(kù),qt(c++)的話可以使用dbus-qt庫(kù),而python使用python-dbus模塊。

還有nodejs的話,我推薦使用node-native模塊(配合nodewebkit還是比較好用的)。

還有做dbus相關(guān)開(kāi)發(fā)的話,使用一個(gè)叫d-feet工具,就可以查看當(dāng)前所有在使用中的dbus名稱及其他屬性。


dbus分為兩種總線,一種叫SystemBus,一種叫SessionBus。SystemBus就只有一條,SessionBus是一個(gè)用戶會(huì)話時(shí)會(huì)產(chǎn)生一條。至于這兩種的區(qū)別,SystemBus一般是用于權(quán)限較高的系統(tǒng)級(jí)(root)進(jìn)程與其他進(jìn)程(可以是普通進(jìn)程)的通信,而SessionBus是用于普通的用戶進(jìn)程之間的交流。

dbus是單對(duì)單的通信,其實(shí)和C/S架構(gòu)差不多,一個(gè)server端接收消息和發(fā)布信號(hào),多個(gè)client端發(fā)送消息和接收信號(hào)。

dbus通信的話有5個(gè)值需要注意:

1. Address:因?yàn)閐bus也是通過(guò)本地socket來(lái)通信,所有會(huì)有socket文件。你可以直接連接這個(gè)sokcet文件的地址來(lái)通信,但這個(gè)我?guī)缀醪挥谩?br>
2. Bus Name:當(dāng)你使用總線守護(hù)進(jìn)程時(shí)(你看進(jìn)程表里不是有很多dbus-daemon嘛,3層結(jié)構(gòu)的第二層),你只用通過(guò)一個(gè)Bus Name就可以直接將消息路由到你想要的地址。所以這么方便,干嘛用上面的。server端想要Bus Name需要向SystemBus或SessionBus申請(qǐng)。如果不申請(qǐng)連接到dbus,它會(huì)自動(dòng)被分配一個(gè)唯一的名字,就是1.45之類的,這數(shù)字沒(méi)什么意義,只是為了名字唯一。名字除了路由消息還有第二種用途,就是當(dāng)一個(gè)程序退出,斷開(kāi)連接,消息總線就會(huì)提醒其他連接程序該名字失去了所有者。這樣就容易管理其他程序了

3. Path:這個(gè)路徑是指你在進(jìn)程里的路徑,你可以按模塊來(lái)劃分,比如NetwrokManager 有 無(wú)線和有線這兩模塊。

4. Interface:他就像是一組功能的集合名字,你可以按功能來(lái)劃分。

5. Method/Signals:方法和信號(hào),方法其實(shí)就是進(jìn)程里的函數(shù)名,你發(fā)消息給這個(gè)函數(shù)名,這個(gè)函數(shù)就會(huì)被調(diào)用,并返回結(jié)果。信號(hào)就是當(dāng)server端主動(dòng)調(diào)用這個(gè)信號(hào)函數(shù)的時(shí)候,便會(huì)發(fā)出這個(gè)信號(hào)(信號(hào)名就是函數(shù)名),其他連接在同一總線上的程序,如果誰(shuí)感興趣就會(huì)接收處理。

所以總的來(lái)說(shuō),其實(shí)可以這樣理解,Address和Bus Name就相當(dāng)于你家的城市地址,Path就相當(dāng)于你家住哪個(gè)縣哪個(gè)區(qū),Interface就相當(dāng)于你家哪個(gè)村哪個(gè)路,Method就相當(dāng)于你家哪個(gè)人。dbus則充當(dāng)了郵局的身份。

那先嘗試下發(fā)送個(gè)消息看看:

d-feet在SystemBus下可以找到org.freedesktop.DBus這個(gè)Bus Name,它有個(gè)Path叫 “ / ”,“ / ”下面有org.freedesktop.DBus這個(gè)Interface,里面有個(gè)叫GetId的Methods,可以跟它通信一下。這里使用dbus-send命令來(lái)發(fā)送。dbus-send是dbus提供的一個(gè)命令,可直接向目標(biāo)發(fā)送消息。

~ dbus-send --system --print-reply --dest=org.freedesktop.DBus / org.freedesktop.DBus.GetId    

返回打印出了一個(gè)值,這個(gè)值就是GetId函數(shù)的執(zhí)行結(jié)果。

dbus-send使用方法: --system表示是System Bus,--print-reply表示打印回復(fù)信息, --desk=[Bus Name] [Path] [Interface].[Method] 表示地址,注意Method是接在Interface后面的。

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多

    成人国产激情福利久久| 欧美大粗爽一区二区三区| 果冻传媒在线观看免费高清| 又大又长又粗又黄国产| 欧美大粗爽一区二区三区| 精品午夜福利无人区乱码| 日韩欧美第一页在线观看| 久久精品亚洲精品一区| 爽到高潮嗷嗷叫之在现观看| 黑人巨大精品欧美一区二区区| 蜜臀人妻一区二区三区| 99久久精品午夜一区| 婷婷色香五月综合激激情| 亚洲视频一区二区久久久| 日本三区不卡高清更新二区| 99久久婷婷国产亚洲综合精品| 女生更色还是男生更色| 国产不卡在线免费观看视频| 亚洲精品中文字幕无限乱码| 色婷婷中文字幕在线视频| 丰满熟女少妇一区二区三区| 91日韩在线视频观看| 香蕉尹人视频在线精品| 果冻传媒在线观看免费高清| 亚洲欧美日韩网友自拍| 丁香七月啪啪激情综合| 激情五月天免费在线观看| 亚洲国产av在线视频| 九九热视频网在线观看| 久久福利视频在线观看 | 欧美成人黄色一级视频| 九九热国产这里只有精品| 少妇特黄av一区二区三区| 日韩精品区欧美在线一区| 日韩欧美精品一区二区三区| 亚洲综合日韩精品欧美综合区| 99久久成人精品国产免费| 熟女一区二区三区国产| 国产成人精品午夜福利| 欧美日韩有码一二三区| 精品综合欧美一区二区三区|