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