评论说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
是内核想要的。内核内部(看不到libc)包括内核头。net/if.h
是你的核心网络工具。:-)
早在很久以前,两者之间就存在不兼容的问题。这导致f.e.无法使用ifconfig等工具。目前(大约10-15年以来),它们集成良好,向后兼容。