Joh*_*itb 12 c sockets linux unix-socket
创建unix套接字时,man 7 unix允许路径名()最多为108个字符.对于朋友来说,这导致了他的节目中的一个错误,因为他的路径更长.现在我们想知道这个数字是如何确定的.
我怀疑这个数字是确定的,因此sizeof该结构sockaddr_un与其他sockaddresses的大小相比是明确的sockaddr_in.但如果他们想避免与其他sizeof值发生冲突,为什么不使用素数呢?有人可以为此提供一个授权来源吗?
它是为了匹配一个方便的内核数据结构中的可用空间。
编辑:
引用McKusick 等人的“ 4.4BSD 操作系统的设计与实现”。阿尔。(第 369 页):
内存管理工具围绕称为mbuf的数据结构展开。Mbuf 或内存缓冲区长 128 字节,其中 100 或 108 字节保留用于数据存储。
如果你有时找不到它,那只是意味着没有什么可找到的。但这也可能意味着您找不到它。但是,我想分享我到目前为止的发现和
我很难猜测这个数字是武断的。
我的猜测得到了来自GNU C 库的这两个声明的支持:
char sun_path[108]这是要使用的文件名。不完整:为什么 108 是一个神奇的数字?RMS 建议将其设为零长度数组并调整以下示例以使用 alloca 根据文件名的长度分配适当的存储量。
(RMS 应该是 Richard M. Stallman(另一个猜测))
日期类型:struct sockaddr
...
char sa_data[14]这是实际的套接字地址数据,它是格式相关的。它的长度也取决于格式,并且很可能超过 14。 sa_data 的长度 14 本质上是任意的。
PS:不知道为什么,这种问题让我很好奇。