작업중인 프로젝트의 경우 선택한 SSID에 대해 정기적으로 프로브 요청 (10ms마다 ~ 10 개)을 보내야합니다.
현재 다음 코드로이 작업을 수행하고 있습니다.
char *args[] = {"iwlist", INTERFACE, "scan", "essid", ssid, (char *) NULL};
runQuietlyNonblocking(args);
여기서 runQuietlyNonblocking
새 스레드가 완료 될 때까지 기다리지 않고 execvp 및 fork를 사용하여 args에서 명령을 실행합니다.
그러나 iwlist 스캔은 프로브 응답을 대기하고 새 프로브 요청을 작성하는 데 필요한 것보다 더 많은 시간이 걸리기 때문에 프로브 요청이 전송되지만 약 30 분 후에 약 10000 개의 스레드가 생기고 메모리 부족으로 인해 프로그램이 충돌합니다.
나는 raspbian lite가 설치된 라즈베리 파이에서 작업하고 있습니다. 답변을 기다릴 필요없이 프로브 요청을 보내는 더 좋은 방법이 있습니까? 프로브 요청을 수동으로 보내거나 iwlist에 응답을 찾지 않도록 지시 할 수 있습니까?
몇 가지 옵션이 있습니다. 내가 아는 한 "w"매개 변수가있는 popen ()은 명령 실행을 기다리지 않지만 프로세스를 포크하고 pclose ()는 명령이 실행될 때까지 대기합니다. system ()은 명령 실행을 기다리지 만 다음과 같이 쉘에 공급할 수 있습니다.
system("iwlist wlan0 scan &")
즉, iwlist에 갇혀 있다면. 대안으로 wpa_supplicant를 사용해 볼 수 있습니다. 그것은 "scan"인터페이스와 "scan_results"를 가지고 있으며, 첫 번째는 요청을 보내고 나중에 결과를 제공합니다.
for (;;)
{
FILE *fp = popen ("wpa_cli -i wlan0 scan", "w");
if (fp)
pclose (fp);
sleep (1);
}
(wpa_supplicant가 실행 중임을 의미합니다).
마지막으로, 자체 인터페이스로 백그라운드 스캔을 수행 할 수있는 드라이버가 있으며 독점 Redpine 드라이버에서이를 확인했습니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다