我正在我的Ubuntu PC上以C++进行标准的fork/execl扫描Wi-Fi SSID。 使用 excel 调用时,接口名称似乎未生效。
execl( "/sbin/iwlist", "wlp4s0", "scanning", (char*) NULL );
这成功了,但我在标准中得到了这个:
lo 接口不支持扫描。
enp0s25 接口不支持扫描。
看起来 iwlist 正在尝试扫描所有接口。
相反,如果我这样做:
system( "/sbin/iwlist wlp4s0 scanning" );
我在标准中没有收到这些消息。
我在执行电话中做错了什么吗?
通了。
在 bash 中,你总是写一些类似的东西
命令 arg1 arg2 ...
当程序"command"解析其参数时,第一个参数(argv[0](是"command"。
但是,当您使用 execl 调用"命令"时,如下所示:
execl( "/path/to/command", "arg1", "arg2", (char*) NULL );
它得到的第一个参数是'arg1'。如果命令期望将其作为 argv[1] 并改为将其作为 argv[0],这显然不起作用。
这就解释了为什么命令忽略了我的"wlp4s0"ifname。 它只是忽略了它期望为命令名称/路径的第一个参数。
所以我最初问题的解决方案是这样的:
execl( "/sbin/iwlist", "iwlist", "wlp4s0", "scanning", (char*) NULL );