【发布时间】:2010-10-01 05:01:40
【问题描述】:
我有一台计算机(比如计算机 A),只要计算机 A 通过特定的 telnet 端口建立连接,它就会启动一个程序。
计算机 A 上的这个程序处理登录、身份验证等。它可以做的工作之一是接收文件。它通过启动 gKermit 来处理这个问题。
<pre>/usr/local/bin/gkermit -e 8000 -w -a /location/x/ -ir</pre>
我在计算机 B 上有第二个程序。第二个程序将连接到计算机 A
mPid = forkpty(&mPort, buffer, &mCurrTermattr, NULL);
...
if child
{
execl("/usr/bin/telnet", "telnet", mComPort.name.c_str(), NULL);
}
现在程序的父进程可以使用文件描述符mPort来发送接收数据了。 (即像登录计算机 A,并告诉它接收文件)
问题是当计算机 B 启动 gKermit 发送文件时,它无法与计算机 A gKermit 通信。
<pre>system(gkermit -d gkermit.txt -X -e 8000 -i -s testfile.txt)</pre>
有人会认为,如果我们正在使用 mPort 进行通信,我们可以通过以下方式重定向计算机 B 系统调用 stdio 以使用该 mPort:
<pre>dup2(mPort, STDIN_FILENO)</pre>
然而这并不能解决问题。任何帮助将不胜感激。
【问题讨论】:
-
我不确定我是否理解问题所在。如果不是使用 system(...) 调用,而是尝试从计算机 B 上的 shell 远程登录到计算机 A,会发生什么?