Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 使用iwinfo库时没有扫描结果_C_Openwrt_Wifi - Fatal编程技术网

C 使用iwinfo库时没有扫描结果

C 使用iwinfo库时没有扫描结果,c,openwrt,wifi,C,Openwrt,Wifi,我是OpenWrt的新手。我正在使用iwinfo lib扫描wifi。在我多次扫描代码之前,它一直运行良好。起初我认为这是因为我使用这个库时出错了,所以我尝试从iwinfo库修改cli程序,并使其扫描两次。下面是cli代码的主要功能,它只工作一次。print_scanlist函数的实现与cli程序中的相同 int main() { const struct iwinfo_ops *iw = iwinfo_backend("wlan0"); print_scanlist(iw, "wlan

我是OpenWrt的新手。我正在使用iwinfo lib扫描wifi。在我多次扫描代码之前,它一直运行良好。起初我认为这是因为我使用这个库时出错了,所以我尝试从iwinfo库修改cli程序,并使其扫描两次。下面是cli代码的主要功能,它只工作一次。print_scanlist函数的实现与cli程序中的相同

int main() {
  const struct iwinfo_ops *iw = iwinfo_backend("wlan0");
  print_scanlist(iw, "wlan0");
  print_scanlist(iw, "wlan0");
  iwinfo_finish();
  return 0;
}

起初我认为这是因为硬件不允许在短时间内扫描。但是如果我第二次运行这个程序,它对第一个函数仍然有效。现在我不知道为什么会发生这种情况,有人知道为什么吗?

我几乎可以肯定这些选项中的一个(甚至两个)会起作用:

int main() {
    const struct iwinfo_ops *iw = iwinfo_backend("wlan0");
    print_scanlist(iw, "wlan0");
    iwinfo_finish();
    print_scanlist(iw, "wlan0");
    iwinfo_finish();
    return 0;
}


重要的是要理解,
iw
不是某种句柄,它只是指向存储在后端库中的函数列表的指针。列表是硬编码的,不能在运行时修改。

因为我使用nl80211作为后端,所以我深入研究了iwinfo的源代码。我发现它正在使用WPA请求。在scan函数中,它调用了一个函数名
nl80211\u get\u scanlist\u wpactl
,其目的是连接到WPA请求者,并要求其扫描并获得结果

iwinfo中的步骤如下

send(sock, "ATTACH", 6, 0);
send(sock, "SCAN", 4, 0);
send(sock, "SCAN_RESULTS", 12, 0);

问题是iwinfo忘记调用分离,因此下次您将无法执行任何操作。所以在我添加了一个
send(sock,“DETACH”,6,0)
之后,我让它开始工作了。谢谢大家

打印了哪个错误,哪个后端?你试过其他后端的卡吗?
send(sock, "ATTACH", 6, 0);
send(sock, "SCAN", 4, 0);
send(sock, "SCAN_RESULTS", 12, 0);