75
当我读到BlueZ源代码,我经常看到这样定义char
阵列:为什么定义 0作为C中char数组的第一个元素?
// bluez/android/sco-msg.h
static const char BLUEZ_SCO_SK_PATH[] = "\0bluez_sco_socket";
有什么好处呢定义的第一个元素为\0
?
当我读到BlueZ源代码,我经常看到这样定义char
阵列:为什么定义 0作为C中char数组的第一个元素?
// bluez/android/sco-msg.h
static const char BLUEZ_SCO_SK_PATH[] = "\0bluez_sco_socket";
有什么好处呢定义的第一个元素为\0
?
在你的具体情况下,这个数组被用作PF_LOCAL
套接字的路径名;见here。而领先的NUL则用来指出该地址是一个抽象的地址。从man 7 unix:
一个抽象的套接字地址是由以下事实: sun_path [0]是一个空字节区分( '\ 0')。
这就是为什么第一个元素是\0
的唯一原因。
可能也想引用这一点,为后人:“他抽象的名字空间w [随着Linux 2.2引入],不应该用于便携式程序。” – Kevin
它有效地隐藏了打印或复制标准功能的字符串 - 无论其意图是什么。 – tofro
在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