c-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是内核想要的。内核内部(看不到libc)包括内核头。net/if.h是你的核心网络工具。:-)

早在很久以前,两者之间就存在不兼容的问题。这导致f.e.无法使用ifconfig等工具。目前(大约10-15年以来),它们集成良好,向后兼容。

最新更新