当使用execl调用时,iwlist尝试扫描所有接口

时间:2017-06-14 21:10:20

标签: c++ linux execl

我在我的Ubuntu PC上用C ++做一个标准的fork / execl来扫描Wi-Fi SSID。看起来接口名称在使用excel调用时没有生效。

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

这成功但我在stderr中得到了这个:

  

lo界面不支持扫描。

     

enp0s25界面不支持扫描。

看起来iwlist正试图扫描所有接口。

如果我这样做:

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

我没有在stderr中收到这些消息。

我的execl电话中有什么问题吗?

1 个答案:

答案 0 :(得分:0)

想出来。

在bash中,你总是写一些像

这样的东西
  

命令arg1 arg2 ...

当程序'command'解析其参数时,第一个参数(argv [0])是'command'。

但是,使用execl调用'command'时,如下所示:

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

它获得的第一个参数是'arg1'。如果命令期望将其作为argv [1]并将其作为argv [0]获取,那么这显然不起作用。

这解释了为什么命令忽略了我的“wlp4s0”ifname。它只是忽略了它希望命令名称/路径的第一个参数。

因此我原来问题的解决方案就是:

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