检测网线是否连接和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");
}
}
}