Проблема в том, что ваш первый аргумент - "4444".Почему?
Посмотрите на эту строку:
execlp("/usr/bin/netcat", "127.0.0.1", "4444", 0);
Аргумент first для execlp()
- это исполняемый двоичный файл.Остальные аргументы образуют argv[]
-вектор, передаваемый процессу.
По соглашению argv[0]
должен содержать имя исполняемого файла, а первый "настоящий" аргумент - argv[1]
, что"4444" в вашем случае.То, что вы делаете, является эквивалентом оболочки
netcat 4444
, и правильный вызов будет:
execlp("/usr/bin/netcat", "netcat", "127.0.0.1", "4444", 0);
Btw.использование execlp()
имеет смысл только при вызове двоичного файла без полного пути, поскольку он ищет сам правильный путь (используя переменную среды PATH).В противном случае следует использовать execl()
.Но это все равно будет работать.