dbus中的數據類型

DBus中也是類似於靜態語言,使用了「強類型」數據格式。在DBus上傳遞的所有數據都需要聲明其對應的類型,下面整理了下,DBus中的數據類型,以及在DBus中聲明的數據類型是什麼意思。

dbus類型 說明
s string 字符串類型,可以聲明 s:
a array 數組,可以聲明為 a:
v variant,variant::
() 結構體,聲明時為雙括號中間的為類型,可以是多個,例如(ss) 即這個結構體內包含兩個字符串屬性
b 布爾值
SIGNATURE signature類型
y BYTE
d DOUBLE
t UINT64
x INT64
u UINT32
i INT32
q uint16
n INT16
{} 詞典,這裡聲明為兩個括號,中間為其對應的 key value,例如 {sv} 即 key是字符串類型,value是variant類型。
o OBJECT_PATH 對象路徑
  • a{sv} : 是一個數組,為 一個鍵值對的詞典,裏面僅有一個

  • (ssssa{ss}as) 為一個結構體, 裏面屬性有7個 兩個詞典(數組),五個字符串類型

  • (sssbsasa(ss)asba(ssss)asasasasa(ss)b) 這個類型拆開為下:共16個屬性

    (
     s string
     s string
     s string
     b bool
     s string
     as array only one string
     a(ss) two string type in the array
     as array only one string
     b bool
     a(ssss) four string type in the array
     as array only one string
     as array only one string
     as array only one string
     as array only one string
     a(ss)  two string type in the array
     b bool
     )
    

    對上述類型,python中就可以很靈活的聲明

    ["", "", "", False, DEFAULT_ZONE_TARGET, [], [],
                             [], False, [], [], [], [], [], [], False]
    

    go 中就需要按照對應類型聲明為不通的結構體,屬性名稱可以不為主,順序需要一致。

    其dbus收到的報文內容為

       struct {
          string ""
          string "Public" 
          string "For use in public areas. You do not trust the other computers on networks to not harm your computer. Only selected incoming connections are accepted."
          boolean false
          string "default"
          array [
             string "ssh"
             string "dhcpv6-client"
          ]
          array [
             struct {
                string "55555-55557"
                string "tcp"
             }
          ]
          array [
             string "redirect"
             string "network-unknown"
          ]
          boolean true
          array [
             struct {
                string "1122"
                string "tcp"
                string "22"
                string "10.0.0.3"
             }
          ]
          array [
             string "eth0"
          ]
          array [
             string "10.0.0.1"
             string "10.0.0.2"
          ]
          array [
             string "rule family="ipv4" source address="192.168.1.101/32" service name="telnet" accept limit value="1/m""
          ]
          array [
             string "tcp"
             string "udp"
          ]
          array [
             struct {
                string "80"
                string "tcp"
             }
             struct {
                string "100"
                string "tcp"
             }
          ]
          boolean false
       }
    
  • ao: array,裏面元素僅為一個object_path

golang 中聲明一個 Variant

在go中看到variant類型如下

type Variant struct {
	sig   Signature
	value interface{}
}

可以通過 SignatureOf("short")聲明一個 Signature

然後在通過:MakeVariantWithSignature(v interface{}, s Signature) Variant 聲明 對應的 Variant


註:其他數據類型與golang自己的數據類型一致,數組可以使用slice(類似php,python直接用數組替代即可更靈活)


More Reference

dbus data type

dbus data type conparision perl

Tags: