日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

linux 进程间通信 dbus-glib【实例】详解二(下) 消息和消息总线(ListActivatableNames和服务器的自动启动)(附代码)

發(fā)布時間:2025/3/20 linux 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 linux 进程间通信 dbus-glib【实例】详解二(下) 消息和消息总线(ListActivatableNames和服务器的自动启动)(附代码) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

linux 進程間通信 dbus-glib【實例】詳解一(附代碼)(d-feet工具使用)

linux 進程間通信 dbus-glib【實例】詳解二(上) 消息和消息總線(附代碼)

linux 進程間通信 dbus-glib【實例】詳解二(下) 消息和消息總線(ListActivatableNames和服務器的自動啟動)(附代碼)

linux 進程間通信 dbus-glib【實例】詳解三 數(shù)據(jù)類型和dteeth(類型簽名type域)(層級結(jié)構(gòu):服務Service --> Node(對象、object) 等 )(附代碼)

linux 進程間通信 dbus-glib【實例】詳解四(上) C庫 dbus-glib 使用(附代碼)(編寫接口描述文件.xml,dbus-binding-tool工具生成綁定文件)

linux 進程間通信 dbus-glib【實例】詳解四(下) C庫 dbus-glib 使用(附代碼)

文章目錄

  • dbus實例講解(二下):消息和消息總線
      • 2.3.2、ListActivatableNames和服務器的自動啟動
      • 2.3.3、其它方法
        • NameHasOwner判斷有沒有連接擁有指定的公共名:
        • GetNameOwner返回公共名對應的唯一名:
        • GetConnectionUnixUser返回指定連接對應的服務器進程的Unix用戶id:
        • GetId返回消息總線的ID:
  • 3 結(jié)束語

dbus實例講解(二下):消息和消息總線

2.3.2、ListActivatableNames和服務器的自動啟動

運行:(普通用戶下都能運行,root用戶下只能運行system,session運行不了)

$ dbus-send --system --print-reply --dest=org.freedesktop.DBus / org.freedesktop.DBus.ListActivatableNames

$ dbus-send --session --print-reply --dest=org.freedesktop.DBus / org.freedesktop.DBus.ListActivatableNames
返回的數(shù)據(jù)是一樣的。在我的電腦上返回的數(shù)據(jù)是:

array [string "org.freedesktop.DBus"string "org.freedesktop.Notifications"string "net.ekiga.helper"string "org.freedesktop.PowerManagement"string "org.freedesktop.Tracker"string "org.freedesktop.SystemToolsBackends.GroupsConfig"string "org.freedesktop.SystemToolsBackends.NTPConfig"string "org.gnome.Tomboy"string "org.freedesktop.SystemToolsBackends.HostsConfig"string "org.freedesktop.SystemToolsBackends.NFSConfig"string "org.freedesktop.SystemToolsBackends"string "net.ekiga.instance"string "org.gnome.GnomeVFS.Daemon"string "com.redhat.dhcp"string "org.freedesktop.SystemToolsBackends.TimeConfig"string "org.freedesktop.SystemToolsBackends.IfacesConfig"string "org.freedesktop.SystemToolsBackends.ServicesConfig"string "org.gnome.Rhythmbox"string "org.freedesktop.SystemToolsBackends.Platform"string "org.freedesktop.SystemToolsBackends.UsersConfig"string "org.freedesktop.SystemToolsBackends.SMBConfig"string "org.gnome.SettingsDaemon"]

我們也可以用python腳本調(diào)用ListActivatableNames。例如:寫一個叫dls.py的腳本:(我ubuntu沒裝python就不演示了)

$ cat dls.py #!/usr/bin/env python import dbus bus=dbus.SystemBus() bus_obj=bus.get_object('org.freedesktop.DBus', '/') iface=dbus.Interface(bus_obj, 'org.freedesktop.DBus') names=iface.ListActivatableNames() for n in names:print n

運行:

$ ./dls.py |sort

輸出為:

com.redhat.dhcp net.ekiga.helper net.ekiga.instance org.freedesktop.DBus org.freedesktop.Notifications org.freedesktop.PowerManagement org.freedesktop.SystemToolsBackends org.freedesktop.SystemToolsBackends.GroupsConfig org.freedesktop.SystemToolsBackends.HostsConfig org.freedesktop.SystemToolsBackends.IfacesConfig org.freedesktop.SystemToolsBackends.NFSConfig org.freedesktop.SystemToolsBackends.NTPConfig org.freedesktop.SystemToolsBackends.Platform org.freedesktop.SystemToolsBackends.ServicesConfig org.freedesktop.SystemToolsBackends.SMBConfig org.freedesktop.SystemToolsBackends.TimeConfig org.freedesktop.SystemToolsBackends.UsersConfig org.freedesktop.Tracker org.gnome.GnomeVFS.Daemon org.gnome.Rhythmbox org.gnome.SettingsDaemon org.gnome.Tomboy

使用python腳本調(diào)用dbus接口是不是很簡單。如果你看過dbus-glib的代碼(后面會講解),你對python的簡潔會有更深刻的感觸(額,,,這是暗示dbus-glib代碼很復雜??)。如果你執(zhí)行:

$ cat /usr/share/dbus-1/services/*|grep Name|awk -F= '{print $2}'|sort

(ubuntu里service里有東西,arm攝像頭service目錄下啥也沒有)
你會得到:

com.redhat.dhcp net.ekiga.helper net.ekiga.instance org.freedesktop.Notifications org.freedesktop.PowerManagement org.freedesktop.SystemToolsBackends org.freedesktop.SystemToolsBackends.GroupsConfig org.freedesktop.SystemToolsBackends.HostsConfig org.freedesktop.SystemToolsBackends.IfacesConfig org.freedesktop.SystemToolsBackends.NFSConfig org.freedesktop.SystemToolsBackends.NTPConfig org.freedesktop.SystemToolsBackends.Platform org.freedesktop.SystemToolsBackends.ServicesConfig org.freedesktop.SystemToolsBackends.SMBConfig org.freedesktop.SystemToolsBackends.TimeConfig org.freedesktop.SystemToolsBackends.UsersConfig org.freedesktop.Tracker org.gnome.GnomeVFS.Daemon org.gnome.Rhythmbox org.gnome.SettingsDaemon org.gnome.Tomboy

這條命令的輸出與ListActivatableNames的輸出是不是基本相同?你能看懂上面這條命令嗎?

(cat /usr/share/dbus-1/services/*|grep Name|awk -F= ‘{print $2}’|sort)

它將"/usr/share/dbus-1/services/"下所有文件交給grep篩選出包含“Name”的行。將包含“Name”的行交給awk處理,awk用"="作為列分隔符,取出第二列然后交給sort排序后輸出。

"/usr/share/dbus-1/services/"目錄就是dbus放service文件的地方。需要自動啟動的服務器會在這個目錄放一個service文件,例如:

$ cat /usr/share/dbus-1/services/dhcdbd.service

[D-BUS Service] Name=com.redhat.dhcp Exec=/usr/sbin/dhcdbd

Name是服務器的公共名,Exec是服務器的執(zhí)行路徑。在客戶請求一個服務,但該服務還沒有啟動時。dbus會根據(jù)service文件自動啟動服務。我們再寫一個調(diào)用“org.fmddlmyy.Test”的Add接口的python腳本:

$ cat add.py #!/usr/bin/env python import dbus bus = dbus.SessionBus() obj = bus.get_object( 'org.fmddlmyy.Test', '/TestObj' ) iface = dbus.Interface(obj, 'org.fmddlmyy.Test.Basic') sum = iface.Add(100, 999) print sum

在啟動“org.fmddlmyy.Test”服務器前調(diào)用這個腳本

$ ./add.py
會得到錯誤輸出:

... dbus.exceptions.DBusException: org.freedesktop.DBus.Error.ServiceUnknown: The name org.fmddlmyy.Test was not provided by any .service files

我們編輯一個service文件:

$ cat org.fmddlmyy.Test.service [D-BUS Service] Name=org.fmddlmyy.Test Exec=/home/lvjie/work/dbus/hello-dbus3-0.1/src/example-service

把這個文件放到"/usr/share/dbus-1/services/"目錄后,再執(zhí)行add.py:

$ sudo cp org.fmddlmyy.Test.service /usr/share/dbus-1/services/
$ cd …/…/py
$ ./add.py
1099
這次dbus自動啟動了服務器,我們的客戶腳本得到了正確的輸出,你有沒有感到dbus的神奇?dbus在自動啟動服務器后,不會自動關(guān)閉。如果沒人管它,這個服務器會一直開著。

2.3.3、其它方法

再演示幾個“org.freedesktop.DBus”接口的方法。

NameHasOwner判斷有沒有連接擁有指定的公共名:

$ dbus-send --session --type=method_call --print-reply --dest=org.freedesktop.DBus / org.freedesktop.DBus.NameHasOwner string:"org.fmddlmyy.Test"
輸出為:

method return sender=org.freedesktop.DBus -> dest=:1.31 reply_serial=2boolean true

GetNameOwner返回公共名對應的唯一名:

$ dbus-send --session --type=method_call --print-reply --dest=org.freedesktop.DBus / org.freedesktop.DBus.GetNameOwner string:"org.fmddlmyy.Test"
輸出為:

method return sender=org.freedesktop.DBus -> dest=:1.32 reply_serial=2string ":1.30"

GetConnectionUnixUser返回指定連接對應的服務器進程的Unix用戶id:

$ dbus-send --session --type=method_call --print-reply --dest=org.freedesktop.DBus / org.freedesktop.DBus.GetConnectionUnixUser string:":1.30"
輸出為:

method return sender=org.freedesktop.DBus -> dest=:1.33 reply_serial=2uint32 1000

這就是我的用戶id:

$ id -u lvjie
1000

GetId返回消息總線的ID:

$ dbus-send --session --type=method_call --print-reply --dest=org.freedesktop.DBus / org.freedesktop.DBus.GetId
輸出為:

method return sender=org.freedesktop.DBus -> dest=:1.34 reply_serial=2string "dc209fee5f8ce01b0c23da0049668f11"

3 結(jié)束語

這一集有一些python代碼。即使你沒有學過python,我也建議你看一看、試一試。其實我也沒有學過python。 小時候,好像聽過什么德國人一邊看說明書一邊開飛機的笑話。這或許是吹牛,但對于程序員來說一邊查手冊一邊用新語言寫一些簡單程序應該不算困難。 下一講我們要寫一個略大點的python程序。雖然我習慣于C/C++的事必躬親,但不可否認python確實是很有魅力的語言, 難怪在嵌入式環(huán)境也有那么多人用python作原型開發(fā)。

參考文章:dbus實例講解(二下):消息和消息總線

總結(jié)

以上是生活随笔為你收集整理的linux 进程间通信 dbus-glib【实例】详解二(下) 消息和消息总线(ListActivatableNames和服务器的自动启动)(附代码)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 成人一区二区三区仙踪林 | 黄色午夜网站 | 日韩欧美猛交xxxxx无码 | 亚洲人精品午夜射精日韩 | 国产人妻精品久久久久野外 | 91精品在线观看视频 | 国产成人a v | 亚洲一卡二卡在线 | 污污污污污污www网站免费 | www.com黄色片| 国产黄色三级 | 国产999在线 | 男人天堂电影 | 成年人免费小视频 | 800av凹凸 | 国产精品自拍网站 | 日韩av电影手机在线观看 | 精品视频成人 | 亚洲狼人在线 | av免费一区 | 国产青草| 国产酒店自拍 | 日韩色道 | 奇米影视一区二区 | 狠狠网 | 激情综合一区二区三区 | 美女扒开内看个够网站 | 国产精品美女久久久久av超清 | 久久久久久蜜桃 | 欧美大片一区二区 | 国产视频三区 | 亚洲三区在线播放 | 亚洲精品亚洲人成人网 | 亚洲AV无码久久精品色三人行 | 欧美日韩1区2区3区 亚洲日本精品视频 | 国产成人精品在线播放 | 亚洲人久久 | 成人在线观看国产 | 性史性dvd影片农村毛片 | 欧美在线一区二区视频 | 激情五月深爱五月 | 综合网伊人| 长篇高h肉爽文丝袜 | 久久久久久日产精品 | 国产免费又黄又爽又色毛 | 超碰91在线观看 | 麻豆国产尤物av尤物在线观看 | 深爱婷婷网 | 女女高潮h冰块play失禁百合 | 国产成人无遮挡在线视频 | 日韩高清欧美 | 欧美aaa视频| 国产va视频 | 久久无码性爱视频 | 夜夜爽夜夜爽 | 91久久免费 | 亚洲资源站 | 色中色在线视频 | 一区视频网站 | 色哒哒影院 | 精品黑人一区二区三区国语馆 | 欧美性猛交xxxx黑人猛交 | 永久免费不卡在线观看黄网站 | 国产精品久久免费视频 | 男女午夜影院 | 日韩欧美视频网站 | 国产精品一级二级 | 日本久久综合 | 久久久久无码国产精品一区李宗瑞 | 国产福利专区 | 健身教练巨大粗爽gay视频 | 天堂av中文 | 天海翼av在线播放 | 第一章激情艳妇 | 99自拍网| 丰满孕妇性春猛交xx大陆 | 情侣av| 五月天综合婷婷 | 午夜影院在线看 | 欧美精品一级二级三级 | 麻豆免费在线观看视频 | 99热黄色 | 日韩久久免费 | 无码人妻精品一区二区三区99v | 精品无码黑人又粗又大又长 | 日韩福利片在线观看 | 国产一区二区三区在线 | 欧美日韩在线观看视频 | 91精品国产精品 | 久草在在线 | av永久网站| 人人妻人人澡人人爽人人精品 | 久久精品人人 | 超碰在线免费97 | 国产精品69久久久久孕妇欧美 | 日韩毛片免费看 | 国产一线二线三线女 | 国产精品久久久久一区二区三区 | 极品美女销魂一区二区三区 |