当前位置: 技术问答>linux和unix
如何判断网卡关闭 或则网线没有插好
来源: 互联网 发布时间:2017-03-20
本文导语: int get_netlink_status(void) { int skfd; struct ifreq ifr; struct ethtool_value edata; edata.cmd = ETHTOOL_GLINK; edata.data = 0; memset(&ifr, 0 , sizeof(ifr)); strcpy(ifr.ifr_name, "eth0"); ifr.ifr_data =...
int get_netlink_status(void)
{
int skfd;
struct ifreq ifr;
struct ethtool_value edata;
edata.cmd = ETHTOOL_GLINK;
edata.data = 0;
memset(&ifr, 0 , sizeof(ifr));
strcpy(ifr.ifr_name, "eth0");
ifr.ifr_data = (char *) &edata;
if (( skfd = socket( AF_INET, SOCK_DGRAM, 0 )) == 0)
return -1;
printf("SIOCETHTOOL = %dn" , SIOCETHTOOL);
if(ioctl( skfd, SIOCETHTOOL , &ifr) == -1)
{
close(skfd);
return -1;
}
close(skfd);
return edata.data;
}
返回始终是1 无论是否关闭网卡
有没有其他方法 请高手指点
{
int skfd;
struct ifreq ifr;
struct ethtool_value edata;
edata.cmd = ETHTOOL_GLINK;
edata.data = 0;
memset(&ifr, 0 , sizeof(ifr));
strcpy(ifr.ifr_name, "eth0");
ifr.ifr_data = (char *) &edata;
if (( skfd = socket( AF_INET, SOCK_DGRAM, 0 )) == 0)
return -1;
printf("SIOCETHTOOL = %dn" , SIOCETHTOOL);
if(ioctl( skfd, SIOCETHTOOL , &ifr) == -1)
{
close(skfd);
return -1;
}
close(skfd);
return edata.data;
}
返回始终是1 无论是否关闭网卡
有没有其他方法 请高手指点
|
给你个最简单的实现方法:
先安装个ethtool工具
然后在程序中
system("ethtool eth0 | grep "Link detected" > /tmp/result.tmp");
然后在文件/tmp/result.tmp中查找字符串
如果是no,则说明网卡关闭或者网线没有插好
如果是yes,则网络正常。
先安装个ethtool工具
然后在程序中
system("ethtool eth0 | grep "Link detected" > /tmp/result.tmp");
然后在文件/tmp/result.tmp中查找字符串
如果是no,则说明网卡关闭或者网线没有插好
如果是yes,则网络正常。
|
fd = socket(AF_INET, SOCK_DGRAM, 0);
if (fd
if (fd