该方法用到了ioctl操作ETHTOOL,需要root权限, 否则会失败!
// PARAM: devname -- just the device name such as eth0, eth1 etc.
// RETURN: -1 -- error , details can check errno
// 1 -- interface link up
// 0 -- interface link down.
int link_status(const char* devname)
{
int ret = 1;
int fd;
struct ifreq ifr;
struct ethtool_value edata;
edata.cmd = ETHTOOL_GLINK;
edata.data = 0;
memset(&ifr, 0, sizeof(ifr));
snprintf(ifr.ifr_name, sizeof(ifr.ifr_name), "%s", devname);
ifr.ifr_data = (char *) &edata;
if ((fd = socket(AF_INET, SOCK_DGRAM, 0)) == -1) {
fprintf(stderr, "socket() error: %s\n", strerror(errno));
ret = -1;
goto done;
}
if (ioctl(fd, SIOCETHTOOL, &ifr) == -1) {
fprintf(stderr, "ioctl() SIOCETHTOOL error: %s\n", strerror(errno));
ret = -1;
goto done;
}
ret = (edata.data > 0 ? 1 : 0);
done:
if (fd > 0) close(fd);
return ret;
}
ioctl ETHTOOL 接口状态检查
本文介绍了一个用于检测网络接口连接状态的方法,通过 ioctl 操作 ETHTOOL 来判断设备如 eth0 是否处于连接状态。此方法需要 root 权限,并返回接口的连接状态:1表示连接正常,0表示未连接。
811

被折叠的 条评论
为什么被折叠?



