| 
       
	结构原型: 
	/* 
	 * 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 
	 union 
	 { 
	  char ifrn_name[IFNAMSIZ];  /* if 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 ifru_flags; 
	  int ifru_ivalue; 
	  int ifru_mtu; 
	  struct  ifmap ifru_map; 
	  char ifru_slave[IFNAMSIZ]; /* Just fits the size */ 
	  char ifru_newname[IFNAMSIZ]; 
	  void __user * ifru_data; 
	  struct if_settings ifru_settings; 
	 } 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 ifr_settings ifr_ifru.ifru_settings /* Device/proto settings*/ 
	  
	基本介绍:  
	ifreq结构定义在/usr/include/net/if.h,用来配置ip地址,激活接口,配置MTU等接口信息的。其中包含了一个接口的名字和具体内容——(是个共用体,有可能是IP地址,广播地址,子网掩码,MAC号,MTU或其他内容)。ifreq包含在ifconf结构中。而ifconf结构通常是用来保存所有接口的信息的。 
	  
	举例说明: 
	在Linux系统中,ifconfig命令是通过ioctl接口与内核通信,例如,当系统管理员输入如下命令来改变接口eth0的MTU大小: 
	    ifconfig eth0 mtu 1250 
	ifconfig命令首先打开一个socket,然后通过系统管理员输入的参数初始化一个数据结构,并通过ioctl调用将数据传送到内核。SIOCSIFMTU是命令标识符。 
	    struct ifreq data; 
	    fd = socket(PF_INET, SOCK_DGRAM, 0); 
	    < ... initialize "data" ...> 
	    err = ioctl(fd, SIOCSIFMTU, &data); 
 
      (责任编辑:IT) |