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

9
评论说 net/if.h 是 GNU C 库的一部分,而linux/if.h 则表示它是“为 LINUX 操作系统实现 TCP/IP 协议套件的一个实现”。但是为什么会有两个并且它们各自有什么用处呢?
2个回答

12

最初,它们都提供了数据结构来管理网络接口。 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 的文件,用于同样的目的,并且最初更加注重 用户空间

需要注意的是,如果您要同时使用它们(它们共享某些结构但不是全部),包含顺序非常重要,在大多数情况下建议先包含 linux/if.h 再包含 net/if.h


5

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

因此,net/if.h是进程可见的内容,而linux/if.h是内核希望看到的内容。内核内部(不看libc)包含内核标头。net/if.h是您的高级网络工具所包含的内容。:-)

很久以前,两者之间存在不兼容性问题。这导致ifconfig等工具不能正常工作。当前(大约10-15年)它们已经被很好地集成并保持向后兼容。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接