Я делаю стандартный форк / execl в C ++ на моем компьютере с Ubuntu для сканирования SSID Wi-Fi. Похоже, что имя интерфейса не вступает в силу при вызове с Excel.
execl( "/sbin/iwlist", "wlp4s0", "scanning", (char*) NULL );
Это успешно, но я получаю это в stderr:
Интерфейс lo не поддерживает сканирование.
enp0s25 Интерфейс не поддерживает сканирование.
Похоже, iwlist пытается сканировать все интерфейсы.
Если вместо этого я делаю:
system( "/sbin/iwlist wlp4s0 scanning" );
Я не получаю эти сообщения в stderr.
Есть ли что-то, что я делаю неправильно в моем вызове execl?
Догадаться.
В bash ты всегда пишешь что-то вроде
команда arg1 arg2 …
Когда программа «команда» анализирует свои аргументы, первый аргумент (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 );
Других решений пока нет …