linux 网线插拔检测

来源:互联网 发布:科沃尔数据 编辑:程序博客网 时间:2024/06/02 12:13

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

#include <net/if.h> 

#include <net/if_arp.h>
#include <sys/ioctl.h>
#include <netinet/in.h>     
#include <stdio.h>
#include <string.h>

//如果网口已插上网线,返回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");
}
}
}
0 0
原创粉丝点击