2016-07-11 72 views
75

當我讀到BlueZ源代碼,我經常看到這樣定義char陣列:爲什麼定義 0作爲C中char數組的第一個元素?

// bluez/android/sco-msg.h 
static const char BLUEZ_SCO_SK_PATH[] = "\0bluez_sco_socket"; 

有什麼好處呢定義的第一個元素爲\0

+23

它有效地隱藏了打印或複製標準功能的字符串 - 無論其意圖是什麼。 – tofro

+0

在Bluez中,這個樣式數組的用法如下: struct sockaddr_un addr; memcpy(addr.sun_path,BLUEZ_SCO_SK_PATH,sizeof(BLUEZ_SCO_SK_PATH)); 套接字路徑看起來是什麼/ dev/socket /?bluez_sco_socket? 或使用「ls」命令無法看到? – user1923105

回答

116

在你的具體情況下,這個數組被用作PF_LOCAL套接字的路徑名;見here。而領先的NUL則用來指出該地址是一個抽象的地址。從man 7 unix

一個抽象的套接字地址是由以下事實: sun_path [0]是一個空字節區分( '\ 0')。

這就是爲什麼第一個元素是\0的唯一原因。

+9

可能也想引用這一點,爲後人:「他抽象的名字空間w [隨着Linux 2.2引入],不應該用於便攜式程序。」 – Kevin

相關問題