在linux下写过一个获取网卡状态的函数
int netlink_check(const char *if_name)
{
struct ifaddrs *ifa = NULL;
struct ifaddrs *ifList;
if(getifaddrs(&ifList) < 0) {
return -1;
}
for (ifa = ifList; ifa != NULL; ifa = ifa->ifa_next)
{
if(ifa->ifa_addr->sa_family == AF_INET) {
if(strcmp(ifa->ifa_name, if_name) ==0) {
if(!(ifa->ifa_flags & IFF_UP)) {
printf("device down\n");
freeifaddrs(ifList);
return 1;
}
if(!(ifa->ifa_flags & IFF_RUNNING)) {
printf("device unplug\n");
freeifaddrs(ifList);
return 2;
}
printf("device link\n");
freeifaddrs(ifList);
return 3;
}
}
}
printf("none device\n");
freeifaddrs(ifList);
return 0;
}
其中核心函数getifaddrs在移植到较低版本android上时无法使用;
在GitHub上找到该函数的实现,并简单改动,使得android下可用;
int netlink_check(const char *if_name)
{
struct ifaddrs *ifa = NULL;
struct ifaddrs *ifList;
if(getifaddrs(&ifList) < 0) {
return -1;
}
for (ifa = ifList; ifa != NULL; ifa = ifa->ifa_next)
{
if(ifa->ifa_addr->sa_family == AF_PACKET) {
if(strcmp(ifa->ifa_name, if_name) ==0) {
if(!(ifa->ifa_flags & IFF_UP)) {
printf("device down\n");
freeifaddrs(ifList);
return 1;
}
if(!(ifa->ifa_flags & IFF_RUNNING)) {
printf("device unplug\n");
freeifaddrs(ifList);
return 2;
}
printf("device link\n");
freeifaddrs(ifList);
return 3;
}
}
}
printf("none device\n");
freeifaddrs(ifList);
return 0;
}
此处提供资源链接:
http://download.csdn.net/detail/u011793203/9872918