FTP-клиент контролируется по каналу в C - PullRequest
3 голосов
/ 01 марта 2010

Я пытаюсь управлять FTP-клиентом из программы на Си (OS X). Я сделал fork и execve - процесс запущен нормально. Проблема в каналах - я могу отправить команду клиентскому процессу ftp и получить обратную связь от него (если я отправляю «help \ n», я возвращаю вывод справки), но я никогда не получаю в трубе приглашение «ftp>». Есть идеи?

Иван

Ответы [ 3 ]

3 голосов
/ 01 марта 2010

Ваш ftp-клиент, вероятно, ведет себя иначе, если stdin / stdout является терминалом или чем-то еще (многие программы делают, для начала библиотека C выполняет буферизацию по-другому ...) Если вы хотите это контролировать, выполните поискинформация о псевдо-терминалах, слишком техническая, чтобы объяснять здесь.(И смотрит сначала на программы типа expect, возможно, вам не придется писать свою).

1 голос
/ 01 марта 2010

Программа может проверить stdin, чтобы выяснить, является ли это терминалом или каналом. В вашем случае программа FTP, вероятно, делает это (например, чтобы узнать, может ли она использовать escape-последовательности для рендеринга индикаторов выполнения или предложить редактирование командной строки).

Если вам действительно нужно приглашение, вам нужно посмотреть PTY (псевдотерминалы), которые имитируют консоль.

0 голосов
/ 01 марта 2010

дикая догадка: не пишется ли приглашение "ftp>" в STDERR?

...