#include <stdio.h>
#include <string.h>
#include <errno.h>
#include <fcntl.h>
#include <string.h>
#include <sys/ioctl.h>
#include <sys/socket.h>
#include <linux/if.h>
#include <unistd.h>
#include <netinet/in.h>
#include <sys/socket.h>
#include <netdb.h>
#include <errno.h>
#include <netinet/ip.h>
#include <arpa/inet.h>
#include <netinet/ip_icmp.h>
#include <linux/if_ether.h>
#include <linux/sockios.h>
#include <linux/ethtool.h>
static int get_netlink_status(const char *if_name)
{
int skfd;
struct ifreq ifr;
struct ethtool_value edata;
memset(&ifr,0,sizeof(ifr));
edata.cmd=ETHTOOL_GLINK;
edata.data=0;
strncpy(ifr.ifr_name,if_name,sizeof(ifr.ifr_name));
ifr.ifr_data=(char*)&edata;
if((skfd=socket(AF_INET,SOCK_DGRAM,0)<0))
{
printf("get_netlink_status() socketerr skfd=%d strerror(errno)=%s\n",skfd,strerror(errno));
return -1;
}
#if 0
if(ioctl(skfd,SIOCGIFFLAGS,&ifr)==-1)
#endif
if(ioctl(skfd,SIOCETHTOOL,&ifr)==-1)
{
printf("Error=%s\n",strerror(errno));
printf("get_netlink_status() ioctl err skfd=%d\n",skfd);
close(skfd);
return -1;
}
close(skfd);
return edata.data;
}
int main()
{
printf("eth0_data=%d\n",get_netlink_status("eth"));
printf("lo=%d\n",get_netlink_status("lo"));
printf("virbr0=%d\n",get_netlink_status("virbr0"));
return 0;
}
打印结果为什么是这个:明明eth0是连接状态了。代码是在root用户下的虚拟机中测试的,跟这个有关系么?
get_netlink_status() ioctl err skfd=0
eth0_data=-1
lo=1
virbr0=1
3 个解决方案
#1
虚拟机和实体机总该有区别,否则就不叫虚拟机了。
纯打酱油的路过……
纯打酱油的路过……
#2
printf("eth0_data=%d\n",get_netlink_status("eth
0"));
确定没有少0?
确定没有少0?
#3
加了也是一样的!!
#1
虚拟机和实体机总该有区别,否则就不叫虚拟机了。
纯打酱油的路过……
纯打酱油的路过……
#2
printf("eth0_data=%d\n",get_netlink_status("eth
0"));
确定没有少0?
确定没有少0?
#3
加了也是一样的!!