据我观察,两个库都包含90%以上的完全相同的代码。当我在示例程序中声明它们时,不会发生魔术。即使它们位于单独的目录中,我也不太了解它们的区别,有人可以帮我分解一下吗?
另外:我尝试在sys / socket.h之上声明linux / in.h,编译器嗡嗡作响,如“找不到sa_family_t的指定列表”,这意味着sa_family_t未在linux / in.h的范围内定义,如果以这种方式呼叫...
然后我为netinet / in.h尝试了同样的东西,好了,不管声明在哪里,它都可以工作。
该linux/*.h
头真的意味着内部内核使用,如果今天的Linux正在创建中,这些文件甚至没有下存在/usr/include
。但是在早期,许多用户空间libc(当时为libc4和libc5)都依赖Linux标头来定义用于用户空间的类型,常量,结构等,因此它们netinet/in.h
包含#include <linux/in.h>
相同或相似的内容,并且开始了可爱的传统。如今,linux
树中唯一应用于用户空间应用程序的标头是与在较低级别支持特定硬件(例如Linux控制台,帧缓冲区,video4linux等)相关的一些东西。
简而言之,您应该使用netinet/in.h
(POSIX指定的标准标头)并假装从未见过linux/in.h
。:-)
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句