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

Mar*_*ste 6 c linux

评论说这net/if.h是GNU C库的一部分,并称linux/if.h它是"LINUX操作系统的TCP/IP协议套件的实现".

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

jcm*_*jcm 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.
 */
Run Code Online (Sandbox Code Playgroud)

net/if.h是glibc的文件用于相同的目的,最初更user space专注.

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


pet*_*ica 5

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

因此,这net/if.h就是您的进程可以看到的内容,也是linux/if.h内核想要的内容。内核内部(看不到 libc)包括内核头文件。net/if.h是您的核心网络工具所包含的内容。:-)

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