【问题标题】:iwlist tries to scan all interfaces when called using execliwlist 在使用 execl 调用时尝试扫描所有接口
【发布时间】:2017-06-14 21:10:19
【问题描述】:

我正在我的 Ubuntu PC 上使用 C++ 执行标准 fork/execl 以扫描 Wi-Fi SSID。用excel调用接口名好像没有生效。

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

这成功了,但我在标准错误中得到了这个:

lo 接口不支持扫描。

enp0s25 接口不支持扫描。

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

如果我这样做:

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

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

在我的 execl 调用中我做错了什么吗?

【问题讨论】:

    标签: c++ linux execl


    【解决方案1】:

    想通了。

    在 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 );
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-04-21
      • 1970-01-01
      • 2017-06-20
      • 1970-01-01
      • 2019-07-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多