sudo apt-get install dbus:
安裝d-feet,用於檢視 session bus 和 system bus
sudo apt-get install d-feet
安裝glib2.0, 這步安裝的會比較多
sudo apt-get install libgtk2.0-dev
安裝 dbus-glib
apt-get install libdbus-glib-1-dev
整理dbus路徑
5.1 進入/usr/include下,將/usr/include/dbus-1.0/dbus資料夾複製到/usr/include下
5.2.將/usr/lib/x86_64-linux-gnu/dbus下dbus-arch-deps.**件複製到/usr/include/dbus下
5.3.將/usr/include/glib-2.0下所有檔案及資料夾複製至/usr/include/下
5.4.將/usr/lib/x86_64-linux-gnu/glib-2.0/include下glibconfig.h複製到/usr/include/下
這裡也整理好了dbus_include路徑,可以將裡面的所有檔案到拷貝至/usr/include下即可,檔案鏈結-》
先執行: dbus-launch 這個如果有問題,加一引數執行: dbus-launch --sh-syntax
june@june:~/document/method$ dbus-launch
dbus_session_bus_address=unix:abstract=/tmp/dbus-zkvuxsyjdt,guid=2725ec7c229349533242c8a45b34ac2e
dbus_session_bus_pid=2934
dbus_session_bus_windowid=71303169
匯出這個變數
export dbus_session_bus_address=unix:abstract=/tmp/dbus-zkvuxsyjdt,guid=2725ec7c229349533242c8a45b34ac2e
使用dbus服務端和客戶端**進行測試,看看dbus環境是否正常
// 服務端**
#include
#include
#include
#include
#include
void
listen_signal()
if(connection ==
null
)return
;//步驟2:給連線名分配乙個可記憶名字test.singal.dest作為bus name,這個步驟不是必須的,但推薦這樣處理
ret =
dbus_bus_request_name
(connection,
"test.singal.dest"
,dbus_name_flag_replace_existing,
&err);if
(dbus_error_is_set
(&err))if
(ret !=dbus_request_name_reply_primary_owner)
return
;//步驟3:通知d-bus daemon,希望監聽來行介面test.signal.type的訊號
dbus_bus_add_match
(connection,
"type='signal',inte***ce='test.signal.type'"
,&err)
;//實際需要傳送東西給daemon來通知希望監聽的內容,所以需要flush
dbus_connection_flush
(connection);if
(dbus_error_is_set
(&err)
)//步驟4:在迴圈中監聽,每隔開1秒,就去試圖自己的連線中獲取這個訊號。這裡給出的是中連線中獲取任何訊息的方式,所以獲取後去檢查一下這個訊息是否我們期望的訊號,並獲取內容。我們也可以通過這個方式來獲取method call訊息。
while(1
)if(dbus_message_is_signal
(msg,
"test.signal.type"
,"test"))
dbus_message_unref
(msg);}
//end of while
}int
main
(void
)
// 客戶端**
#include
#include
#include
#include
#include
#include
intsend_a_signal
(char
* si**alue)
if(connection ==
null
)return-1
;//步驟2:給連線名分配乙個well-known的名字作為bus name,這個步驟不是必須的,可以用if 0來注釋著一段**,我們可以用這個名字來檢查,是否已經開啟了這個應用的另外的程序。
#if 1
ret =
dbus_bus_request_name
(connection,
"test.singal.source"
,dbus_name_flag_replace_existing,
&err);if
(dbus_error_is_set
(&err))if
(ret !=dbus_request_name_reply_primary_owner)
return-1
;#endif
//步驟3:傳送乙個訊號
//根據圖,我們給出這個訊號的路徑(即可以指向物件),介面,以及訊號名,建立乙個messageif(
(msg =
dbus_message_new_signal
("/test/signal/object"
,"test.signal.type"
,"test"))
==null
)//給這個訊號(messge)具體的內容
(msg,
&arg);if
(!(&arg,dbus_type_string,
&si**alue)
)printf
("signal send: %s\n"
,si**alue)
;//步驟4: 將訊號從連線中傳送if(
!dbus_connection_send
(connection,msg,
&serial)
)dbus_connection_flush
(connection)
;printf
("--------success signal send----------\n");
//步驟5: 釋放相關的分配的記憶體。
dbus_message_unref
(msg )
;return0;
}int
main
(void
)
編譯
gcc service.c -ldbus-1 -i/usr/include/dbus-1 -o service
gcc client.c -ldbus-1 -i/usr/include/dbus-1 -o client
備註:報錯可以輸入如下命令
(1) evaldbus-launch --auto-syntax
DBUS與多執行緒
毫無疑問,dbus是支援多執行緒的,否則它的使用會受到很多限制。但大多數人並不知道使用時要做些特殊處理才行,我們就是因為開始不知道,結果出現了好幾個難查的bug,浪費了不少時間。把幾個主要問題寫到這裡,供有類似情況的朋友參考吧 一定要呼叫dbus g thread init。我們開始以為呼叫了g t...
使用npm安裝jQuery與驗證
1.安裝 使用軟體 websrorm 安裝路徑 h 1學習資料 1前端 jquery train 安裝過程 在h 1學習資料 1前端 jquery train所在的webstorm的terminal視窗中輸入npm install jquery 出現 jquery 3.2.1 安裝成功 2.驗證 在...
使用新型D BUS與桌面應用程式通訊
d bus 是乙個大有前途的訊息匯流排和活動系統,正開始深入地滲透到 linux 桌面之中。了解建立它的原因 它的用途以及發展前景。d bus 本質上是 程序間通訊 inter process communication ipc 的乙個實現。不過,有一些特性使得 d bus 遠遠不是 只是另乙個 i...