日期:2014-05-16  浏览次数:20651 次

求救啊 linux下用ioctl获取不到wifi信息
我在用ioctl获取wifi信息时总是返回-1,用peeroe()得到的错误为 Bad address。求大神指导啊!!!
这是代码:int porting_wifi_scannn()
{
    struct iw_range *range;
    struct iwreq iwr;

int sockfd = socket(AF_INET, SOCK_DGRAM, 0);
if (sockfd < 0 )
{
printf("create sock failed\n");
return -1;
}
int  ret  = 0;
memset(&iwr,0,sizeof(iwr));
iwr.u.data.pointer = (caddr_t)range;
iwr.u.data.length = sizeof(struct iw_range) + 500;
iwr.u.data.flags = 0;

strncpy(iwr.ifr_name, "wlan0", IFNAMSIZ);
printf("name = %s\n",iwr.ifr_name);
ret = ioctl(sockfd, SIOCGIWRANGE, &iwr);
printf("ret = %d\n",ret);
if (ret < 0)
{
perror("error siocgiwrange:");
return -1;
}

在调用此接口前,wifi 已经激活了,ifconfig能够看到 wlan0设备。

为什么ioctl会返回-1,错误为bad address?
------解决方案--------------------
还是看看wpa_supplicant源码包中wpa_cli是怎么实现的。
感觉这里的AF_INET 应该是PF_UNIX,只是用作本机的IPC的。
------解决方案--------------------
在板子上用iwconfig等命令查看该板子是否支持