【问题标题】:What does the prefixes mean in UNIX NETWORK PROGRAMMING?UNIX 网络编程中的前缀是什么意思?
【发布时间】:2018-11-14 19:05:16
【问题描述】:

当我阅读 Unix Network Programming 一书时,有许多套接字 API/类型的前缀为 sin_addrsininet_addrinetin_addr_tin。这些前缀究竟是什么意思,即全名是什么?

【问题讨论】:

  • 它们不仅在书中,而且在 Berkeley Sockets API 中。类似于sin_addr: Socket Internet 地址,即包含端口号; inet_addr: 网址; in_addr_t: Internet 地址。
  • @EJP 非常感谢。你怎么知道他们的全名?通过猜测,或者是否有关于这些 API 的文档/命名习语?
  • 根据上下文推断。

标签: c sockets unix posix


【解决方案1】:

我相信在早期,结构成员必须是独一无二的。对两个不同结构中的成员使用相同的名称失败。对于有助于使用 C 结构和预处理器宏的汇编宏来说,这仍然是(并且一直是)正确的。

过去的结构和常量因此使用通常源自结构名称或上下文的前缀。例如。 struct addressinfo 使用 ai 前缀,struct sockaddr 使用 sa,struct sockaddr_in 使用 sin 等等。

为每个成员使用唯一的名称允许对 C 和 asm 代码使用相同的名称,这使得阅读和编写两种语言的代码更加容易。切换语言时无需在脑海中切换曲目。

【讨论】:

  • “在两个不同的结构中为成员使用相同的名称失败” - 任何参考还是只是您的猜测?
  • 只是一个模糊的记忆,肯定在ansi C之前。在ASM文件中使用同名可能更重要。
  • 参见例如this old C manual,在第8.5节的末尾:However, names of tags and members must be distinct. The same member name can appear in different structures only if the two members are of the same type and if their origin with respect to their structure is the same; thus separate structures can share a common initial segment.
  • @WumpusQ.Wumbley 不开玩笑(?!)。这是什么时候发布的?它看起来像 70 年代后期。
  • @ErikBennett 查看bell-labs.com/usr/dmr/www 的其余部分以了解历史背景(它说手册来自 V6 unix,1975 年 5 月)
猜你喜欢
  • 1970-01-01
  • 2010-10-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-29
  • 2020-07-28
相关资源
最近更新 更多