gpt4 book ai didi

c - 在套接字中使用 offsetof() 而不是 sizeof() 有什么区别吗?

转载 作者:太空狗 更新时间:2023-10-29 11:13:05 24 4
gpt4 key购买 nike

在套接字编程中,尤其是在处理 struct sockaddr_un 类型的 Unix 域套接字时,一些 people use offsetof() 计算sockaddr_un 结构的大小,如-

struct sockaddr_un {
sa_family_t sun_family; /* AF_UNIX */
char sun_path[108]; /* pathname */
};
size = (offsetof (struct sockaddr_un, sun_path)
+ strlen (name.sun_path));

在一些other places , 他们使用

size = sizeof(struct sockaddr_un)

我知道第一种方法考虑了较短的路径名称,第二种方法给出了一个固定的最大大小,而不考虑实际路径长度。

它真的对像 bind 这样传递这个值的函数有影响吗?如果不是,这两个可以互换使用吗?

最佳答案

offsetof 考虑了 C 编译器可能在基本成员的大小之后添加的任何填充。但是,如果您使用包含由 C 编译器添加的填充的 C 结构定义网络数据包,则会遇到更大的问题!事实上,我会确保添加一个测试用例,以确保两种方法返回相同的大小,以防止不正确的编译选项更改填充规则,例如。

在这个问题的上下文中,不,bind 没有任何区别。

关于c - 在套接字中使用 offsetof() 而不是 sizeof() 有什么区别吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33534673/

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