这两天看用C获取当前网口的插入网线状态的程序,遇见了这两个不熟悉的结构体,看了头文件中的说明和详细。

struct ifreq

这个结构定义在include/net/if.h,用来配置ip地址,激活接口,配置MTU等接口信息的

  1. /* Interface request structure used for socket ioctl's.  All interface
  2. ioctl's must have parameter definitions which begin with ifr_name.
  3. The remainder may be interface specific.  */
  4. struct ifreq
  5. {
  6. # define IFHWADDRLEN    6
  7. # define IFNAMSIZ   IF_NAMESIZE
  8. union
  9. {
  10. char ifrn_name[IFNAMSIZ];   /* Interface name, e.g. "en0".  */
  11. } ifr_ifrn;
  12. union
  13. {
  14. struct sockaddr ifru_addr;
  15. struct sockaddr ifru_dstaddr;
  16. struct sockaddr ifru_broadaddr;
  17. struct sockaddr ifru_netmask;
  18. struct sockaddr ifru_hwaddr;
  19. short int ifru_flags;
  20. int ifru_ivalue;
  21. int ifru_mtu;
  22. struct ifmap ifru_map;
  23. char ifru_slave[IFNAMSIZ];  /* Just fits the size */
  24. char ifru_newname[IFNAMSIZ];
  25. __caddr_t ifru_data;
  26. } ifr_ifru;
  27. };
  28. # define ifr_name   ifr_ifrn.ifrn_name  /* interface name   */
  29. # define ifr_hwaddr ifr_ifru.ifru_hwaddr    /* MAC address      */
  30. # define ifr_addr   ifr_ifru.ifru_addr  /* address      */
  31. # define ifr_dstaddr    ifr_ifru.ifru_dstaddr   /* other end of p-p lnk */
  32. # define ifr_broadaddr  ifr_ifru.ifru_broadaddr /* broadcast address    */
  33. # define ifr_netmask    ifr_ifru.ifru_netmask   /* interface net mask   */
  34. # define ifr_flags  ifr_ifru.ifru_flags /* flags        */
  35. # define ifr_metric ifr_ifru.ifru_ivalue    /* metric       */
  36. # define ifr_mtu    ifr_ifru.ifru_mtu   /* mtu          */
  37. # define ifr_map    ifr_ifru.ifru_map   /* device map       */
  38. # define ifr_slave  ifr_ifru.ifru_slave /* slave device     */
  39. # define ifr_data   ifr_ifru.ifru_data  /* for use by interface */
  40. # define ifr_ifindex    ifr_ifru.ifru_ivalue    /* interface index      */
  41. # define ifr_bandwidth  ifr_ifru.ifru_ivalue    /* link bandwidth   */
  42. # define ifr_qlen   ifr_ifru.ifru_ivalue    /* queue length     */
  43. # define ifr_newname    ifr_ifru.ifru_newname   /* New name     */
  44. # define _IOT_ifreq _IOT(_IOTS(char),IFNAMSIZ,_IOTS(char),16,0,0)
  45. # define _IOT_ifreq_short _IOT(_IOTS(char),IFNAMSIZ,_IOTS(short),1,0,0)
  46. # define _IOT_ifreq_int _IOT(_IOTS(char),IFNAMSIZ,_IOTS(int),1,0,0)

struct  ifconf

通常是用来保存所有接口信息的

  1. /* Structure used in SIOCGIFCONF request.  Used to retrieve interface
  2. configuration for machine (useful for programs which must know all
  3. networks accessible).  */
  4. struct ifconf
  5. {
  6. int ifc_len;            /* Size of buffer.  */
  7. union
  8. {
  9. __caddr_t ifcu_buf;
  10. struct ifreq *ifcu_req;
  11. } ifc_ifcu;
  12. };
  13. # define ifc_buf    ifc_ifcu.ifcu_buf   /* Buffer address.  */
  14. # define ifc_req    ifc_ifcu.ifcu_req   /* Array of structures.  */
  15. # define _IOT_ifconf _IOT(_IOTS(struct ifconf),1,0,0,0,0) /* not right */

应用

想要获取当前网口网线插入状态,需要用到ifreq结构体,获取网卡的信息,然后socket结合网卡驱动的ioctl,就可以得到与网线插入状态相关的数据。
另外推荐一个百度文库的文章,包含代码

http://wenku.baidu.com/view/59f4508d680203d8ce2f2412.html

struct ifconf和struct ifreq,获取网线插入状态的更多相关文章

  1. 获取网络接口信息——ioctl()函数与结构体struct ifreq、 struct ifconf

    转载请注明出处:windeal专栏 Linux 下 可以使用ioctl()函数 以及 结构体 struct ifreq  结构体struct ifconf来获取网络接口的各种信息. ioctl 首先看 ...

  2. linux网络接口,struct ifreq struct ifconf结构

    网络相关的ioctl请求的request参数及arg地址必须指向的数据类型如下表所示: 接口 SIOCGIFCONF SIOCSIFADDR SIOCGIFADDR SIOCSIFBRDADDR SI ...

  3. struct ifreq 获取IP 和mac和修改mac

    2012-09-11 14:26 struct ifreq 获取IP 和mac和修改mac 配置ip地址和mask地址: ifconfig eth0 192.168.50.22  netmask 25 ...

  4. struct timespec 和 struct timeval

    time()提供了秒级的精确度 . 1.头文件 <time.h> 2.函数原型 time_t time(time_t * timer) 函数返回从TC1970-1-1 0:0:0开始到现在 ...

  5. gettimeofday(struct timeval *tv, struct timezone *tz)函数

    gettimeofday(struct timeval *tv, struct timezone *tz)函数 功能:获取当前精确时间(Unix时间) 其中: timeval为时间 truct tim ...

  6. Go基础系列:struct和嵌套struct

    struct struct定义结构,结构由字段(field)组成,每个field都有所属数据类型,在一个struct中,每个字段名都必须唯一. 说白了就是拿来存储数据的,只不过可自定义化的程度很高,用 ...

  7. linux高精度struct timespec 和 struct timeval

    一.struct timespec 定义: typedef long time_t;#ifndef _TIMESPEC#define _TIMESPECstruct timespec {time_t ...

  8. [转载]彻底弄清struct和typedef struct

    struct和typedef struct 分三块来讲述: 1 首先://注意在C和C++里不同 在C中定义一个结构体类型要用typedef: typedef struct Student { int ...

  9. struct和typedef struct彻底明白了

    struct和typedef struct 分三块来讲述: 1 首先://注意在C和C++里不同 在C中定义一个结构体类型要用typedef: typedef struct Student { int ...

随机推荐

  1. windows phone 网易云阅读hubtile效果实现

    效果图 曾几何时,刚接触wp的时候做了一个类似的界面,不过是Rectangle实现的,还是一个个摆的..囧啊 现在感觉这种应该是用hubtile实现的,Toolkit(http://silverlig ...

  2. 对WebClient扩展自动解压缩页面

    WebClient下载压缩网页时出现的全是乱码,可通过扩展来解决这个问题. public class MyWebClient : WebClient { protected override WebR ...

  3. html5 css3 如何绘制扇形任意角度

    扇形制作原理,底部一个纯色原形,里面2个相同颜色的半圆,可以是白色,内部半圆按一定角度变化,就可以产生出扇形效果 <html> <head> <meta charset= ...

  4. C#多线程(一)

    一.定义与理解 1.定义 线程是操作系统分配CPU时间片的基本单位,每个运行的引用程序为一个进程,这个进程可以包含一个或多个线程. 线程是进程中的执行流程,每个线程可以得到一小段程序的执行时间,在单核 ...

  5. PHP提取身份证号码中的生日并验证是否成年的函数

    php 提取身份证号码中的生日日期以及确定是否成年的一个函数.可以同时确定15位和18位的身份证,经本人亲测,非常好用,分享函数代码如下: <?php //用php从身份证中提取生日,包括15位 ...

  6. 泛型转Datatable

    //自定义扩展方法 public static class ExtMethod { //泛型转为DataTable public static DataTable AsDataTable<T&g ...

  7. Python/Numpy大数据编程经验

    Python/Numpy大数据编程经验 1.边处理边保存数据,不要处理完了一次性保存.不然程序跑了几小时甚至几天后挂了,就啥也没有了.即使部分结果不能实用,也可以分析程序流程的问题或者数据的特点.   ...

  8. ConfigParser读取记事本、notepad++修改后的配置文件会出现:ConfigParser.MissingSectionHeaderError

    使用ConfigParser来读取配置文件,经常会发现经过记事本.notepad++修改后的配置文件读取时出现下面的问题: ConfigParser.MissingSectionHeaderError ...

  9. 再撸一次简单的NODE.JS

    这毕竟大势所趋,了解一下无防的. 最终,对JS的要求还是有点高... 以后弄过一次,很快就忘了. 再来再拾起来一下. server.js var http = require("http&q ...

  10. HDU4524+水题

    简单. #include<stdio.h> #include<string.h> ; int a[ maxn ]; int main(){ int ca; scanf(&quo ...