0

私はコンピュータ (たとえばコンピュータ A) を持っていますが、コンピュータ A が特定の telnet ポート経由で接続を取得すると、プログラムが起動されます。

コンピューター A 上のこのプログラムは、ログイン、認証などを処理します。実行できるジョブの 1 つは、ファイルの受信です。gKermit を起動することでこれを処理します。

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

コンピューター B に 2 つ目のプログラムがあります。この 2 つ目のプログラムはコンピューター 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

私は間違っているかもしれませんが、stdoutをリダイレクトする必要があります(カーミット通信が双方向の場合はstdinかもしれません)。また、mPort、パイプとは何ですか?あなたはそれに読み書きしますか?通常、2つのファイル記述子があります。1つは読み取り用、もう1つは書き込み用です。

于 2009-01-14T10:52:51.343 に答える
0

jpalecek さん、ご回答ありがとうございます。

追加するようです:

dup2(mPort, STDOUT_FILENO)

gKermint が双方向で通信できるようになりました。もちろん、これは理にかなっています。うーん

于 2009-01-14T20:42:28.923 に答える