Linux环境编程主要头文件分析
来源:互联网 发布:网络溜溜球的意思 编辑:程序博客网 时间:2024/05/21 19:45
适用于linux 3.14及以后
---------------------------------------------------------------------------------------------------
/usr/include目录下包含了linux环境编程时可以使用的所有头文件,这些头文件大致可以分为以下几类:
[1]. linux内核支持的API接口,这类头文件通常位于/usr/include/linux目录下
[2]. 用户态安装的程序通常会在这里生成相关的头文件,比如python2.7的头文件被放在了/usr/include/pythonb2.7目录中
[3]. 剩下的头文件通常就是glibc提供的API接口
需要注意的就是,这几类头文件中往往定义了一些相同的API,所以用户态编程时需要注意重复定义的问题,一下列出了一些常用的头文件。
#include <linux/if_ether.h> - 该头文件是802.3标准以太网物理层接口的全局定义。(要注意的一点是,该头文件跟 net/ethernet.h 存在冲突,避免同时使用)
- 主要定义了一些以太网帧相关的常量;
- 以太网帧头struct ethhdr
- 以太网帧协议类型ID
- 套接字过滤用的ID,比如ETH_P_ALL等
#include <linux/if_packet.h> - 该头文件用于linux AF_PACKET套接字。(要注意的一点是,该头文件跟 netpacket/packet.h 存在冲突,避免同时使用)
- 主要定义了链路层套接字地址 struct sockaddr_ll;
- 包类型(用于sll_pkttype);
- setsockopt设置SOL_PACKET层的套接字选项;
- setsockopt设置SOL_PACKET层的数据结构struct packet_mreq;
- setsockopt设置内容(用于mr_type)
#include <netinet/in.h> - 该头文件是IP层的全局定义(要注意的一点是,不能用 linux/in.h 来替换该头文件,因为netinet/in.h定义了更多相关内容)
- 主要定义了IP层套接字地址 struct sockaddr_in;
- IP层的协议类型ID
- IP层地址结构struct in_addr,常用于IP地址格式转换
- setsockopt设置SOL_IP层的套接字选项
- setsockopt设置SOL_IP层的数据结构struct ip_mreq;
#include <linux/if.h> - 该头文件用于网络接口的查询,比如ioctl。(要注意的一点是,该头文件跟 net/if.h 存在冲突,避免同时使用)
- 主要定义了struct ifreq(用于ioctl)
- 接口返回的标准状态
#include <net/if.h> - 该头文件内容跟 linux/if.h 基本类似,主要的差别在于多定义了几个POSIX标准的API接口(比如if_indextoname等),所以要根据实际使用情况对这两个头文件二选一
#include <netdb.h> - 该头文件通常用于获取主机信息
- 主要定义了struct hostent (主要用于gethostbyaddr和gethostbyname,存放了一个主机包含的完整信息)
- strcut addrinfo (主要用于getaddrinfo,同样是存放了一个主机包含的完整信息)
- 相关的参数定义
#include <sys/socket.h> - 该头文件用于socket编程,定义了所有socket编程相关的API接口
#include <sys/ioctl.h> - 顾名思义,该头文件用于ioctl接口,凡是需要调用ioctl的地方都需要该头文件
#include <sys/epoll.h> - 顾名思义,该头文件用于epoll接口,凡是需要调用epoll相关API的地方都需要该头文件
备注:对于存在冲突的头文件,本人的偏好是尽量使用第一类头文件,只有当涉及第一类头文件中没有支持的API时,才使用其他两类的头文件
---------------------------------------------------------------------------------------------------
/usr/include目录下包含了linux环境编程时可以使用的所有头文件,这些头文件大致可以分为以下几类:
[1]. linux内核支持的API接口,这类头文件通常位于/usr/include/linux目录下
[2]. 用户态安装的程序通常会在这里生成相关的头文件,比如python2.7的头文件被放在了/usr/include/pythonb2.7目录中
[3]. 剩下的头文件通常就是glibc提供的API接口
需要注意的就是,这几类头文件中往往定义了一些相同的API,所以用户态编程时需要注意重复定义的问题,一下列出了一些常用的头文件。
#include <linux/if_ether.h> - 该头文件是802.3标准以太网物理层接口的全局定义。(要注意的一点是,该头文件跟 net/ethernet.h 存在冲突,避免同时使用)
- 主要定义了一些以太网帧相关的常量;
- 以太网帧头struct ethhdr
- 以太网帧协议类型ID
- 套接字过滤用的ID,比如ETH_P_ALL等
#include <linux/if_packet.h> - 该头文件用于linux AF_PACKET套接字。(要注意的一点是,该头文件跟 netpacket/packet.h 存在冲突,避免同时使用)
- 主要定义了链路层套接字地址 struct sockaddr_ll;
- 包类型(用于sll_pkttype);
- setsockopt设置SOL_PACKET层的套接字选项;
- setsockopt设置SOL_PACKET层的数据结构struct packet_mreq;
- setsockopt设置内容(用于mr_type)
#include <netinet/in.h> - 该头文件是IP层的全局定义(要注意的一点是,不能用 linux/in.h 来替换该头文件,因为netinet/in.h定义了更多相关内容)
- 主要定义了IP层套接字地址 struct sockaddr_in;
- IP层的协议类型ID
- IP层地址结构struct in_addr,常用于IP地址格式转换
- setsockopt设置SOL_IP层的套接字选项
- setsockopt设置SOL_IP层的数据结构struct ip_mreq;
#include <linux/if.h> - 该头文件用于网络接口的查询,比如ioctl。(要注意的一点是,该头文件跟 net/if.h 存在冲突,避免同时使用)
- 主要定义了struct ifreq(用于ioctl)
- 接口返回的标准状态
#include <net/if.h> - 该头文件内容跟 linux/if.h 基本类似,主要的差别在于多定义了几个POSIX标准的API接口(比如if_indextoname等),所以要根据实际使用情况对这两个头文件二选一
#include <netdb.h> - 该头文件通常用于获取主机信息
- 主要定义了struct hostent (主要用于gethostbyaddr和gethostbyname,存放了一个主机包含的完整信息)
- strcut addrinfo (主要用于getaddrinfo,同样是存放了一个主机包含的完整信息)
- 相关的参数定义
#include <sys/socket.h> - 该头文件用于socket编程,定义了所有socket编程相关的API接口
#include <sys/ioctl.h> - 顾名思义,该头文件用于ioctl接口,凡是需要调用ioctl的地方都需要该头文件
#include <sys/epoll.h> - 顾名思义,该头文件用于epoll接口,凡是需要调用epoll相关API的地方都需要该头文件
备注:对于存在冲突的头文件,本人的偏好是尽量使用第一类头文件,只有当涉及第一类头文件中没有支持的API时,才使用其他两类的头文件
阅读全文
0 0
- Linux环境编程主要头文件分析
- OpenCV编程->头文件分析
- OpenCV编程头文件分析
- Linux网络编程头文件
- linux编程常用头文件
- Unix环境编程常用头文件
- Linux学习笔记(06-11)UNIX环境高级编程 apue.h头文件的配置
- Linux 环境下常用头文件说明
- linux 下的tcp/ip编程头文件的使用具体分析
- linux内核list.h头文件分析
- linux网络编程常用头文件
- Linux 基本编程头文件说明
- Linux socket 网络编程 常用头文件
- linux网络编程常用头文件
- Linux socket 网络编程 常用头文件
- linux网络编程常用头文件
- Linux编程中中各种头文件
- linux socket 编程常用的头文件
- Servlet
- Mvp简单实现
- Java多线程知识整理
- html入门篇--css优先级
- docker 私服
- Linux环境编程主要头文件分析
- Win10使用附件中的远程桌面连接Ubuntu 16.04图形界面(xrdp方法)
- JAVA date类型处理的一些小知识
- 9-27 DAIRY
- 字符串(含汉字)与十六进制互转js脚本-utf
- 通过form的action属性提交表单并接收处理返回值的方法(页面不跳转)
- 嵌入式Linux开发,开源项目
- 大数据学习第2天----------------linux 安装mysql 出现安装依赖问题解决(centos7)
- Echars学习-动态隐藏扇形区域的文字描述。