我有一台计算机(例如计算机 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)
但是这并不能解决问题。任何帮助将不胜感激。
最佳答案
我可能是错的,但您需要重定向标准输出(如果 kermit 通信是双向的,则可能需要重定向标准输入)。另外,我有点好奇mPort是什么,管道?你会读它并写它吗?通常,您有两个文件描述符,一个用于读取,一个用于写入。
关于linux c/c++ 编程 telnet 连接 io 重定向,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/440175/