gpt4 book ai didi

c - 套接字编程头文件中使用的一段代码的解释

转载 作者:太空宇宙 更新时间:2023-11-04 00:55:41 25 4
gpt4 key购买 nike

谁能给我解释一下这段代码?

/* Pad to size of `struct sockaddr'.  */
unsigned char sin_zero[sizeof (struct sockaddr) -
__SOCKADDR_COMMON_SIZE -
sizeof (in_port_t) -
sizeof (struct in_addr)];

这里 sin_zero 是一个 char 数组,但剩下的部分是什么?它应该是一些整数。这个符号“-”是什么意思?谁能给我解释一下?

最佳答案

好吧,- 被称为“减号”:-) 说真的,方括号之间的所有内容都是为了计算 sin_zero 的大小,即所谓的填充。它是 struct sockaddr_in 中的一个成员,它只是在这里确保 struct sockaddr_in 恰好具有特定大小,最有可能是 16 个字节。这个想法是为了确保大多数 (*) struct sockaddr 变体具有相同的大小以避免 malloc 问题。

引用 a document I found on the subject :

<我>POSIX 规范只要求结构中的三个成员:sin_family、sin_addr 和 sin_port。 POSIX 兼容的实现定义额外的结构成员是可以接受的,这对于 Internet 套接字地址结构来说是正常的。几乎所有的实现都添加了 sin_zero 成员,以便所有套接字地址结构的大小至少为 16 个字节。

(*) 在早期版本中,我写的是all。 @MaximYegorushkin 正确地指出这不是真的,例如 struct sockaddr_un 更大。如果您想要适合所有类型地址的最大大小,请使用 sizeof(struct sockaddr_storage)。此结构仅用于此目的 (AFAIK)。

关于c - 套接字编程头文件中使用的一段代码的解释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3829855/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com