2009-01-13 73 views
0

我有一台计算机(比如计算机A),只要计算机A通过特定的telnet端口获得连接,它就会启动一个程序。linux c/C++编程telnet连接io重定向

这个程序在计算机A上处理登录,身份验证等。它可以做的工作之一是接收文件。它通过启动gKermit来处理这个问题。

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

我对计算机B.第二程序这第二个方案将连接到计算机中的

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

现在该程序可以使用文件描述符M端口的父进程发送接收数据。 (即像登录到计算机A,并告诉它接收文件)

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

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

人们会想,如果我们使用的是M端口谈论我们能够改变B电脑系统调用标准输入输出边做边使用M端口:

dup2(mPort, STDIN_FILENO)

然而,这并不做的伎俩。任何帮助,将不胜感激。

+0

我不确定我是否理解这个问题。如果不是通过系统(...)调用它,而是尝试从计算机B上的shell到计算机A进行telnet,会发生什么情况? – FreeMemory 2009-01-13 22:13:19

回答

0

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

+0

M端口是从forkpty返回的文件描述符()[链接文本] [1] 数据被发送/接收在从计算机B到计算机)telnet连接A,使用M端口作为读()文件描述符/写( [1]:http://linux.die.net/man/3/forkpty – Tree77 2009-01-14 15:32:52

0

感谢您的答复jpalecek,

似乎并补充说:

dup2(mPort, STDOUT_FILENO)

现在允许gKermint在两个方向进行通信。当然有道理。呃