方法一:通过读取"/sys/class/net/xxx/carrier"状态判断网口插入还是断开
int net_detect(char *net_name)
{
char path[64];
char value_str = -1;
int fd = -1;
snprintf(path, sizeof(path), "/sys/class/net/%s/carrier", net_name);
fd = open(path, O_RDONLY);
if(fd < 0) return -1;
if(read(fd, &value_str, 1) < 0) {
close(fd);
return -1;
}
close(fd);
return (atoi(&value_str));
}
方法二:通过SIOCGIFFLAGS获取接口标志
int net_detect(void)
{
int fd = -1;
struct ifreq ifr;
int rev = 0;
fd = socket(AF_INET, SOCK_DGRAM, 0);
if(fd < 0) {
return -1;
}
strcpy(ifr.ifr_name, "FE0");
if(ioctl(fd, SIOCGIFFLAGS, &ifr) < 0) {
close(fd);
return -1;
}
if(ifr.ifr_flags & IFF_RUNNING)
{
rev = 1;
}
close(fd);
return rev;
}