linux / if.h和net / if.h有什么区别?

评论说, net/if.h是GNU C库的一部分, linux/if.h表示它是“LINUX操作系统的TCP / IP协议套件的实现”。

但为什么有两个,每个有什么用?

最初,两者都提供数据结构来管理网络接口。 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聚焦。

需要注意的是,如果要使用两者(它们共享一些结构,但不是全部),则包括顺序非常重要,在大多数情况下,建议在net/if.h之前包含linux/if.h

linux/if.h是内核的一部分(或者从内核的libc中导入), net/if.h是C库的一部分。

因此, net/if.h如果你的进程看到了什么,以及linux/if.h的内核linux/if.h什么。 内核内核(没有看到libc)包含内核头文件。 net/if.h是你的核心网络工具包含的东西。 🙂

在很远以前,两者之间存在不兼容问题。 这导致了不工作ifconfig等工具。 目前(大约10-15岁),它们很好地集成在一起,向后兼容。