据我观察,这两个库都包含超过 90% 完全相同的代码。 当我在我的示例程序中声明它们时,没有魔法发生。 我真的不明白这些库的区别,即使它们位于单独的目录中。有人可以为我分解吗?
加上: 我尝试在 sys/socket.h 之上声明 linux/in.h,编译器发出类似“找不到 sa_family_t 的指定合格列表”的嗡嗡声,这意味着 sa_family_t 没有在 linux/in.h 的范围内定义,如果在这样……
然后我对 netinet/in.h 尝试了同样的事情,好吧,无论声明在哪里,它都有效。
最佳答案
linux/*.h
header 实际上是供内部内核使用的,如果今天创建 Linux,这些文件甚至不会存在于 /usr/include
下。 .但在早期,很多用户空间 libc(当时的 libc4 和 libc5)依赖于 Linux 头文件来定义用户空间中使用的类型、常量、结构等,因此 netinet/in.h
仅包含 #include <linux/in.h>
或类似的,可爱的传统开始了。今天唯一的标题在linux
应该用于用户空间应用程序的树是一些与在低级别支持特定硬件相关的东西,如 Linux 控制台、帧缓冲区、video4linux 等。
简而言之,你应该使用netinet/in.h
(POSIX 指定的标准 header )并假装你从未见过 linux/in.h
. :-)
关于c - 标题 <linux/in.h> 和 <netinet/in.h> 之间的实际区别是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9388611/