2

子親スキームを使用してTelnetセッションを確立し、疑似端末デバイスを介して両方のプロセス間の通信を処理する短いCコードを借用しています。

コードはかなり正常に実行されますが、1つの大きな欠陥があるため、telnetプロセスはほとんどのエスケープシーケンスを実行せず、代わりにそれらを出力します(ESCは^ [[、矢印^ [[A ^ [[B ^ [[C ^ [[D、等。)。

私はすでにかなりの調査を行っていますが、最終プロセスが特別なコードを適切に解釈して真にインタラクティブなセッションを実現するために、ユーザー入力をどのように処理または渡すかを説明する優れたリソースを見つけることができませんでした。

ベースコード:http ://dl.dropbox.com/u/15117414/pty.c

4

1 に答える 1

1

私は問題を解決し、ついに私の質問に対する答えを共有できるようになりました。rawモードにする必要のあるファイル記述子は、疑似端末デバイスのスレーブ側ではなく、親プロセスの標準入力です。

new_term_settings = slave_orig_term_settings;
cfmakeraw(&new_term_settings);
tcsetattr(0, TCSANOW, &new_term_settings);

このようにして、親プロセスはすべてのユーザー入力をそのまま子に渡します。子は、これらの特殊文字の処理方法をすでに知っており、それに応じてそれらを解析します。

于 2013-02-09T20:03:11.550 に答える