评论说net/if.h
是GNU C库的一部分,linux/if.h
表示它是" LINUX操作系统的TCP / IP协议套件的实现。&#34 ;
但是为什么有两个呢?每个人的用途是什么?
答案 0 :(得分:9)
最初,两者都提供数据结构来管理网络接口。linux/if.h
与Linux内核的网络接口交互更具体。实际上,它在文件的开头就是这样说的:
/*
* INET An implementation of the TCP/IP protocol suite for the LINUX
* operating system. INET is implemented using the BSD Socket
* interface as the means of communication with the user level.
*
* Global definitions for the INET interface module.
*/
net/if.h
是glibc用于同一目的的文件,最初更专注于user space
。
重要的是要注意,如果您要同时使用它们(它们共享一些结构但不是全部),则包含顺序非常重要,建议在大多数情况下在{{1}之前包含linux/if.h
}}
答案 1 :(得分:4)
linux/if.h
是内核的一部分(或从内核导入libc),net/if.h
是C库的一部分。
因此,net/if.h
是您的流程可以看到的,linux/if.h
是内核想要的。内核内部(没有看到libc)包含内核头文件。 net/if.h
是您的核心网络工具所包含的内容。 : - )
远在前两者之间存在不兼容问题。这导致f.e.不工作ifconfig等工具。目前(大约10-15岁)它们很好地集成并向后兼容。