2017-06-14 75 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"); 

我不STDERR獲得這些信息。

在我的execl調用中出現錯誤嗎?

回答

0

想通了。

在bash你總是喜歡寫東西

命令ARG1 ARG2 ...

當程序 '命令' 解析它的參數,第一個參數(argv [0])是'命令'。

然而,當你調用 '命令' 用EXECL使用這樣的:

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

它獲得的第一個參數是 'ARG1'。如果命令將argv [1]作爲argv [1]並將其作爲argv [0]取代,這顯然不起作用。

這解釋了爲什麼該命令忽略了我的「wlp4s0」ifname。它完全忽略了它期望成爲命令名稱/路徑的第一個參數。

所以解決我原來的問題是這樣的:

execl("/sbin/iwlist", "iwlist", "wlp4s0", "scanning", (char*) NULL); 
相關問題