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;
};