Я пытался запустить netcat с помощью ssh и кажется, что мой код всегда терпит неудачу в моем C-коде. Вот команды, которые я выполняю, используя system () в этом порядке.
system("ssh machine 'nc -l 61001|dd bs=64M of=temp' &")
system("/bin/dd if=filename bs=64M|nc IP_address 61001")
Я заметил, что первая команда работает правильно, так как временный файл создается на удаленной машине. Вторая команда dd дает сбой и утверждает, что на удаленном компьютере было записано 0 байт. Эти команды работают правильно, когда выполняются из терминала, но терпят неудачу, как только я помещаю их в системные вызовы () в C.
& disown
(вместо просто &) следует сделать.
system()
порождает оболочку, которая просто выполняет один команда, а затем выходит. &
говорит оболочке преобразовать команду в фоновый режим (значит, она не ждет ее завершения), но она все еще является частью сеанса и группы процессов оболочки. Когда лидер группы (снаряд) выходит, все дети убиты. disown
заставляет оболочку запускать новую группу процессов, теперь дочерний процесс находящийся в собственности от init
(первый процесс в системе).
Это о программировании. Вы создаете процессы, похожие на сумасшедшие, чтобы выполнить то, что может легко сделать программа на C, используя вызовы встроенной библиотеки (за исключением ssh
но есть и лучшие способы тоже). Иди читай дальше BSD розетки.