0

我有一台计算机(比如计算机 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来发送接收数据了。(即像登录计算机 A,并告诉它接收文件)

问题是当计算机 B 启动 gKermit 发送文件时,它无法与计算机 A gKermit 通信。

system(gkermit -d gkermit.txt -X -e 8000 -i -s testfile.txt)

有人会认为,如果我们正在使用 mPort 进行交谈,我们可以通过执行以下操作重定向计算机 B 系统调用 stdio 以使用该 mPort:

dup2(mPort, STDIN_FILENO)

然而这并不能解决问题。任何帮助,将不胜感激。

4

2 回答 2

0

我可能错了,但是您需要重定向标准输出(如果 kermit 通信是双向的,则可能需要重定向标准输入)。另外,我有点好奇什么是 mPort,一个管道?你读和写它吗?通常,您有两个文件描述符,一个用于读取,一个用于写入。

于 2009-01-14T10:52:51.343 回答
0

感谢 jpalecek 的回复,

似乎添加:

dup2(mPort, STDOUT_FILENO)

现在允许 gKermint 双向通信。这当然是有道理的。啊

于 2009-01-14T20:42:28.923 回答