linux 网线插拔检测

检测网线是否连接和wifi是否开启:

#include  

#include
#include
#include     
#include
#include

//如果网口已插上网线,返回0,否则返回-1.
int check_nic(char *nic)
{
    struct ifreq ifr;
    int skfd = socket(AF_INET, SOCK_DGRAM, 0);


    strcpy(ifr.ifr_name, nic);
    if (ioctl(skfd, SIOCGIFFLAGS, &ifr) < 0)
    {
        return -1;
    }
    if(ifr.ifr_flags & IFF_RUNNING)
        return 0;  // 网卡已插上网线
    else return -1;
}


int GetWifiStat(void)  
{  
    char    buffer[BUFSIZ];  
    FILE    *read_fp;  
    int        chars_read;  
    int        ret;  
     
    memset( buffer, 0, BUFSIZ );  
    read_fp = popen("ifconfig uap0 | grep RUNNING", "r");  
    if ( read_fp != NULL )  
    {  
        chars_read = fread(buffer, sizeof(char), BUFSIZ-1, read_fp);  
        if (chars_read > 0)  
        {  
            ret = 0;  
        }  
        else  
        {  
            ret = -1;  
        }  
        pclose(read_fp);  
    }  
    else  
    {  
        ret = -1;  
    }  
  
    return ret;  
}

void main(void)
{
int lanConnectFlag;
int wlanConnectFlag;
while(1)
{
lanConnectFlag = check_nic("eth0");
wlanConnectFlag = GetWifiStat();
if(!lanConnectFlag && !wlanConnectFlag)//网线连接上、无线ap开启
{
printf("connect\n");
}
else if(lanConnectFlag && wlanConnectFlag)//网线断开,无线ap不开启
{
printf("disconnect\n");
}
}
}

你可能感兴趣的:(linux,网络相关)