这两天看用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. html常用单词和各种少见标签

    常用单词: 空格  align="left"valign="top"align="center"valign="middle&qu ...

  2. centos7下编译qt的mysql驱动

    在编译mysql驱动之前,首先要安装mysql,可以使用yum安装,这里将不再介绍. 在将qt和mysql都安装好之后,首先找到mysql的头文件以及他的共享库,我的mysql是使用yum安装的,头文 ...

  3. json 数字key json 数字作为主键

    但是当key的值为数字时,只能使用类似数组下表的访问方式取值. var json = '{"0":"a", "1":"b" ...

  4. 使用curl获取网站的http的状态码

    发布:thebaby   来源:net     [大 中 小] 本文分享一例shell脚本,一个使用curl命令获取网站的httpd状态码的例子,有需要的朋友参考下.本文转自:http://www.j ...

  5. C语言的数据类型

    复习之余,做点笔记<C语言之数据类型> 一.整数数据类型 (1)整数数据类型 整数类型 char 字符型变量   1字节(8Bit) short 短整型      2字节(16Bit) i ...

  6. ExtJS4中initComponent和constructor的区别

    Ext的define方法参数类型define( String className, Object data, Function createdFn ) 创建自定义类时,先构造(constructor) ...

  7. Static File Middleware

    [ASP.NET Core] Static File Middleware   前言 本篇文章介绍ASP.NET Core里,用来处理静态档案的Middleware,为自己留个纪录也希望能帮助到有需要 ...

  8. iOS实现地图半翻页效果--老代码备用参考

    // Curl the image up or down CATransition *animation = [CATransition animation]; [animation setDurat ...

  9. Codeforces Round #328 div2

    Problem_A(592A): 题意: 在一个8*8的棋盘上有黑白两种棋子,'W'代表白色,'B'代表黑色. 玩家A执白子,先走. 白子只能向上走,黑子只能向下走.如果有障碍物则不能走, 比如白色的 ...

  10. CSS的绝对定位和相对定位

    css定位标签position包括两个值:relative(相对定位)和absolute(绝对定位),position样式一般都是和top.bottom.left.right一起使用来确定一个标签的位 ...