日期:2014-05-16  浏览次数:21062 次

ioctl获取接口状态这个ifr.ifr_ifrn.ifrn_name找不到啊.
代码如下:
struct ifreq ifr;
strncpy(ifr.ifr_ifrn.ifrn_name, "ppp0", sizeof(ifr.ifr_ifrn.ifrn_name));  
if (ioctl(s, SIOCGIFFLAGS, (caddr_t)&ifr) < 0) { //获取接口标志位
perror("SetPPPConnect ioctl");
return -1;
}


我怎么在ifreq 结构中找不到ifr_ifrn属性啊.
这个属性是什么意思啊.

我找到的结构如下:
struct ifreq {
  char ifr_name[IFNAMSIZ]; /* Interface name */
  union {
  struct sockaddr ifr_addr;
  struct sockaddr ifr_dstaddr;
  struct sockaddr ifr_broadaddr;
  struct sockaddr ifr_netmask;
  struct sockaddr ifr_hwaddr;
  short ifr_flags;
  int ifr_ifindex;
  int ifr_metric;
  int ifr_mtu;
  struct ifmap ifr_map;
  char ifr_slave[IFNAMSIZ];
  char ifr_newname[IFNAMSIZ];
  char * ifr_data;
  };
};

还有就是这个设备ppp0,我怎么在/dev目录下找不到它,它一般都会放在那啊,有谁知道吗?

------解决方案--------------------
你在哪找的,是/usr/include/net/if.h吗?
如果是的话,你直接用ifr.ifrn_name代替ifr.ifr_ifrn.ifrn_name就可以。
给你把我的贴出来。
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;
};