2017-06-14 13 views
0

Ubuntu PCでC++で標準のfork/execlを実行してWi-Fi SSIDをスキャンします。それは、インターフェイス名がExcelで呼び出されたときに有効にならないようです。iwlistはexeclを使用して呼び出されたときにすべてのインターフェイスをスキャンしようとします

execl("/sbin/iwlist", "wlp4s0", "scanning", (char*) NULL); 

これは成功しますが、私は標準エラー出力にこれを取得する:

LOインターフェースは、スキャンをサポートしていません。

enp0s25インターフェイスはスキャンをサポートしていません。

iwlistがすべてのインターフェイスをスキャンしようとしているようです。

代わりに私が行う場合:

system("/sbin/iwlist wlp4s0 scanning"); 

私は標準エラー出力にこれらのメッセージを得ることはありません。

私のexeclコールで間違っていることがありますか?

答えて

0

あなたはいつも

コマンド引数1のarg2のような何かを書くbashで

...

プログラム 'コマンド' の引数を解析するとき、最初の引数は(ARGV [0])であります'コマンド'。しかし

、あなたはこのようEXECL使用して使用して「コマンド」と呼ぶ:それを取得

execl("/path/to/command", "arg1", "arg2", (char*) NULL); 

最初の引数は、「引数1」です。コマンドがこれをargv [1]と期待していて、代わりにargv [0]として取得している場合、これは明らかに機能しません。

これは、コマンドが私の "wlp4s0" ifnameを無視していた理由を説明しています。コマンド名/パスであると予想される最初の引数を単に無視していました。

だから私の元の問題への解決策はこれです:

execl("/sbin/iwlist", "iwlist", "wlp4s0", "scanning", (char*) NULL); 
関連する問題