2016-07-11 70 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

相关问题