2017-02-01 9 views
0

の回答を待たずにプローブ要求を送信すると、選択したSSIDに対してプローブ要求(〜10ミリ秒ごとに)を定期的に送信する必要があります。私が取り組んでいるプロジェクトでC

は現在、私は次のコードでこれをやっている:

runQuietlyNonblockingはフィニッシュに新しいスレッドを待たずにexecvpのフォークと引数でコマンドを実行します
char *args[] = {"iwlist", INTERFACE, "scan", "essid", ssid, (char *) NULL}; 
runQuietlyNonblocking(args); 

しかし、iwlistスキャンはプローブの応答を待つので、新しいプローブ要求を作成するよりも時間がかかります。プローブ要求は送信されますが、約30分後に約10000スレッドが得られ、プログラムがメモリ不足でクラッシュします。

私はraspbian liteがインストールされたラズベリーパイに取り組んでいます。 応答を待たずにプローブ要求を送信するより良い方法はありますか?プローブ要求を手動で送信することも、iwlistに応答を検索しないように伝えることもできますか?

答えて

0

いくつかのオプションがあります。私が知る限り、 "w"パラメータを指定したpopen()はコマンドの実行を待つことはありませんが、プロセスをフォークしますが、pclose()はコマンドが実行されるまで待機します。 system()はコマンドの実行を待つだけですが、このようにシェルに与えることを試みるかもしれません。

system("iwlist wlan0 scan &") 

つまり、あなたがiwlistで立ち往生している場合です。 代わりに、wpa_supplicantを試してみることもできます。それは "スキャン"インターフェースと "scan_results"を持っています。最初はリクエストを送信し、後で結果を出します。

​​

(wpa_supplicantが起動していることを意味します)。

最後に、独自のインターフェイスでバックグラウンドスキャンを実行できるドライバがあります。独自のRedpineドライバで見たことがあります。

+0

ありがとう、私はwpa_supplicantが速い場合に試してみます。 私の呼び出しがコマンド実行を待っていないので、システムまたはpopenで私は同じ問題を抱えています。 問題は、コマンド実行を待たなければならないということではありません。問題は、新しいスレッドのコマンド実行に、別のスレッドを開始するまでの時間よりも時間がかかることです。 –

+0

@FreddyUnicornおそらく、問題は実際には「プローブ要求を送信するためのよりよい方法」ではなく、スレッド管理に関するものですか?最小限のプローブ要求間隔で規制を見たことは覚えていません。モジュール/ドライバ/インターフェイスツールに大きく依存しています。それらの高速要求が必要な場合でも、モジュール用の別のドライバを作成してみてください。それが助けにならない場合は、あなたのスレッドを保持する必要があると推測します。要求が終了してスレッドをきれいに結合するのを待ちます。 – metamorphling

+0

@FreddyUnicornまた、私はiwlistスキャンに関する問題の私のシェアを持っています。私がしていたこと:10秒ごとにスレッドが生成され、iwlistスキャンと呼ばれ、後で閉じられました。それは4〜5時間完璧に働き、「トップ」では不要なプロセスはありませんでした。私は一晩のテストのために私のボードを去りました、そして、午前中に、iwlistがそれらの中に詰まった貝殻がたくさんありました。それは醜いです、私のドライバーは、間隔でバックグラウンドスキャンを設定するための特別なインターフェイスを持っていました(分は3秒でしたが、私はそれが大丈夫だったので10秒に1回必要でした)。あまり助けにはならない、ただの経験。 – metamorphling

関連する問題