2009-01-13 74 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在兩個方向進行通信。當然有道理。呃