我在我的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电话中有什么问题吗?
答案 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 );