У меня очень простой c Linux скрипт ( / home / scripts / script. sh):
#!/bin/bash
echo 'a' | /bin/netcat -vv 10.10.10.1 3333
echo "done" > /tmp/result
Когда я пытаюсь его запустить из оболочки работает нормально. Так что скрипт хорош (также, done записан в файл / tmp / result):
# /home/scripts/script.sh
10.10.10.1: inverse host lookup failed: Unknown host
(UNKNOWN) [10.10.10.1] 3333 (?) open
AABBCCDDEEF
sent 2, rcvd 13
#
Однако, когда я пытаюсь запустить его из кода C ++ в демоне переднего плана:
const char **argv = new const char* [3];
argv[0] = "/home/scripts/script.sh";
argv[1] = "/home/scripts/script.sh";
argv[2] = NULL;
execv(argv[0], const_cast<char**>(&argv[1]));
В течение короткого времени работает хорошо (3-5 минут). После этого короткого периода выполнения сценария происходит сбой, код возврата n c равен 1, и это вывод:
10.10.10.1: inverse host lookup failed: Unknown host
(UNKNOWN) [10.10.10.1] 3333 (?) open
Preposterous fd value 17
sent 0, rcvd 0
Почему это значение fd нелепо? Мой демон открывает некоторые файлы в течение первых 3-5 минут, возможно, netcat не может работать с большими числами как fd?
Как мне преодолеть эту проблему?