struct ifconf和struct ifreq,获取网线插入状态
这两天看用C获取当前网口的插入网线状态的程序,遇见了这两个不熟悉的结构体,看了头文件中的说明和详细。
struct ifreq
这个结构定义在include/net/if.h,用来配置ip地址,激活接口,配置MTU等接口信息的
- /* Interface request structure used for socket ioctl's. All interface
- ioctl's must have parameter definitions which begin with ifr_name.
- The remainder may be interface specific. */
- struct ifreq
- {
- # define IFHWADDRLEN 6
- # define IFNAMSIZ IF_NAMESIZE
- union
- {
- char ifrn_name[IFNAMSIZ]; /* Interface name, e.g. "en0". */
- } ifr_ifrn;
- union
- {
- struct sockaddr ifru_addr;
- struct sockaddr ifru_dstaddr;
- struct sockaddr ifru_broadaddr;
- struct sockaddr ifru_netmask;
- struct sockaddr ifru_hwaddr;
- short int ifru_flags;
- int ifru_ivalue;
- int ifru_mtu;
- struct ifmap ifru_map;
- char ifru_slave[IFNAMSIZ]; /* Just fits the size */
- char ifru_newname[IFNAMSIZ];
- __caddr_t ifru_data;
- } ifr_ifru;
- };
- # define ifr_name ifr_ifrn.ifrn_name /* interface name */
- # define ifr_hwaddr ifr_ifru.ifru_hwaddr /* MAC address */
- # define ifr_addr ifr_ifru.ifru_addr /* address */
- # define ifr_dstaddr ifr_ifru.ifru_dstaddr /* other end of p-p lnk */
- # define ifr_broadaddr ifr_ifru.ifru_broadaddr /* broadcast address */
- # define ifr_netmask ifr_ifru.ifru_netmask /* interface net mask */
- # define ifr_flags ifr_ifru.ifru_flags /* flags */
- # define ifr_metric ifr_ifru.ifru_ivalue /* metric */
- # define ifr_mtu ifr_ifru.ifru_mtu /* mtu */
- # define ifr_map ifr_ifru.ifru_map /* device map */
- # define ifr_slave ifr_ifru.ifru_slave /* slave device */
- # define ifr_data ifr_ifru.ifru_data /* for use by interface */
- # define ifr_ifindex ifr_ifru.ifru_ivalue /* interface index */
- # define ifr_bandwidth ifr_ifru.ifru_ivalue /* link bandwidth */
- # define ifr_qlen ifr_ifru.ifru_ivalue /* queue length */
- # define ifr_newname ifr_ifru.ifru_newname /* New name */
- # define _IOT_ifreq _IOT(_IOTS(char),IFNAMSIZ,_IOTS(char),16,0,0)
- # define _IOT_ifreq_short _IOT(_IOTS(char),IFNAMSIZ,_IOTS(short),1,0,0)
- # define _IOT_ifreq_int _IOT(_IOTS(char),IFNAMSIZ,_IOTS(int),1,0,0)
struct ifconf
通常是用来保存所有接口信息的
- /* Structure used in SIOCGIFCONF request. Used to retrieve interface
- configuration for machine (useful for programs which must know all
- networks accessible). */
- struct ifconf
- {
- int ifc_len; /* Size of buffer. */
- union
- {
- __caddr_t ifcu_buf;
- struct ifreq *ifcu_req;
- } ifc_ifcu;
- };
- # define ifc_buf ifc_ifcu.ifcu_buf /* Buffer address. */
- # define ifc_req ifc_ifcu.ifcu_req /* Array of structures. */
- # define _IOT_ifconf _IOT(_IOTS(struct ifconf),1,0,0,0,0) /* not right */
应用
想要获取当前网口网线插入状态,需要用到ifreq结构体,获取网卡的信息,然后socket结合网卡驱动的ioctl,就可以得到与网线插入状态相关的数据。
另外推荐一个百度文库的文章,包含代码

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
用Grafana为Elasticsearch做日志分析
版权声明:本文为博主chszs的原创文章,未经博主允许不得转载。 https://blog.csdn.net/chszs/article/details/50373453 用Grafana为Elasticsearch做日志分析 作者:chszs,未经博主允许不得转载。经许可的转载需注明作者和博客主页:http://blog.csdn.net/chszs Grafana是一个开源的、功能强大的指标仪表板和图形编辑器工具,它面向Graphite、Elasticsearch、OpenTSDB、Prometheus和InfluxDB等数据源。目前Grafana的最新版本为2.6版。 Grafana仪表板界面如下: Graphite:Graphite是一个可扩展的实时图表,最新版本为0.9.10,地址: http://graphite.wikidot.com/ OpenTSDB:OpenTSDB是一个基于HBase的分布式、可扩展的、基于时间序列的实时监控信息收集和展示平台。它支持秒级数据采集metrics,使用HBase进行永久存储,可以做容量规划,并很容易的接入到现有的监控系统里。OpenT...
- 下一篇
云计算的应用解决方案
摘 要 狭义云计算指IT基础设施的交付和使用模式,指通过网络以按需、易扩展的方式获得所需资源;广义云计算指服务的交付和使用模式,指通过网络以按需、易扩展的方式获得所需服务。这种服务可以是IT和软件、互联网相关,也可以是其他服务。它意味着计算能力也可作为一种商品通过互联网进行流通。 云将实现安全的分析。从网购到医疗再到家庭自动化,分析在如此多的新领域得到应用,因而分析数据的安全性和私密性变得至关重要。在存储和分析引擎中深度集成加密功能并让用户能够拥有密钥,确保了只有这些服务的使用者有权访问数据。 关键词 :云计算;发展状况; 实现机制;应用领域 1 云计算简介 云计算是继20世纪80年代大型计算机到客户端-服务器的大转变之后的又一种巨变。云计算的出现并非偶然,早在上世纪60年代,美国科学家麦卡锡就提出了把计算能力作为一种像水和电一样的公用事业提供给用户的理念,这成为云计算思想的起源。在20世纪80年代网格计算、90年代公用计算,21世纪初虚拟化技术、SOA、SaaS应用的支撑下,云计算作为一种新兴的资源使用和交付模式逐渐为学术界和产业界所认知。中国物联网校企联盟评价云计算为“信息...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Docker安装Oracle12C,快速搭建Oracle学习环境
- CentOS6,CentOS7官方镜像安装Oracle11G
- CentOS7设置SWAP分区,小内存服务器的救世主
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- SpringBoot2全家桶,快速入门学习开发网站教程
- CentOS7安装Docker,走上虚拟化容器引擎之路
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装