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