Linux / C + + C ++ программирование Telnet-соединение IO перенаправление - PullRequest
0 голосов
/ 13 января 2009

У меня есть компьютер (скажем, компьютер A), когда компьютер A подключается через определенный порт telnet, он запускает программу.

эта программа на компьютере A обрабатывает вход в систему, аутентификацию и т. Д. Одно из заданий, которые она может выполнять, - получать файлы. Это обрабатывает это, запуская gKermit.

/usr/local/bin/gkermit -e 8000 -w -a /location/x/ -ir

У меня есть вторая программа на компьютере B. Эта вторая программа подключится к компьютеру A

mPid = forkpty(&mPort, buffer, &mCurrTermattr, NULL); ... if child { execl("/usr/bin/telnet", "telnet", mComPort.name.c_str(), NULL); }

теперь родительский процесс программы может использовать дескриптор файла mPort для отправки полученных данных. (например, как войти в компьютер А и сказать ему, чтобы он получил файл)

Проблема в том, что когда компьютер B запускает gKermit для отправки файла, он не может связаться с компьютером A gKermit. system(gkermit -d gkermit.txt -X -e 8000 -i -s testfile.txt)

Можно подумать, что если мы говорим с помощью mPort, мы могли бы перенаправить системный вызов компьютера B на stdio, чтобы использовать этот mPort, выполнив:

dup2(mPort, STDIN_FILENO)

однако это не сработает. Любая помощь будет оценена.

Ответы [ 2 ]

0 голосов
/ 14 января 2009

Спасибо за ответы, jpalecek,

Кажется, что добавление:

dup2(mPort, STDOUT_FILENO)

теперь позволяет gKermint общаться в обоих направлениях. Что, конечно, имеет смысл. тьфу

0 голосов
/ 14 января 2009

Я могу ошибаться, но вам нужно перенаправить стандартный вывод (и, может быть, стандартный ввод, если связь с Kermit является двунаправленной). Кроме того, мне немного интересно, что такое mPort, труба? Ты читаешь и пишешь в него? Обычно у вас есть два файловых дескриптора, один для чтения, другой для записи.

...