iwlist пытается сканировать все интерфейсы при вызове с использованием execl

Я делаю стандартный форк / 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?

0

Решение

Догадаться.

В 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 );
0

Другие решения

Других решений пока нет …