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

时间:2013-11-19 21:28:59

标签: c linux

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

但是为什么有两个呢?每个人的用途是什么?

2 个答案:

答案 0 :(得分: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.
 */

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

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

答案 1 :(得分:4)

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

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

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