これはあなたが考えるよりも難しいです。
あなたは理解する必要があります端末の仕組み - 彼らは特別な制御シーケンスを使用します。カーソルまたはカラー出力を移動します。これは、端末特有のterminfoファイルによって記述されます。 Ncurses
は、terminfoを使用してそのような制御シーケンスにAPI呼び出し(例えば、カーソルを特定の位置に移動)を変換する。
(最近はxterm
、gnome-terminal
、screen
、tmux
、など)端末は、クライアント側にあるので、あなたは、クライアントからサーバへの端末の種類を渡す必要があります。その理由は次のとおりです。 ssh
は、sshクライアントからサーバーにこの情報を渡します(sshセッションでecho $TERM
を試してください。コンソール経由でログインしている場合は 'linux'、Xとxtermを使用している場合は 'xterm'かもしれません)。また、それぞれのterminfoをサーバー上で使用することをお勧めします。
もう1つのピースは疑似端末です。今日では、シリアル端末を使用する人が比較的少ないため、それらのセマンティクスは、もともとシリアルコンソール用に開発されたアプリケーションおよびライブラリ(例えば、curses
およびその友人)が動作するようにエミュレートされる。これは擬似端末を介して実現されます。これらはパイプのようなもので、マスタとスレーブのデバイスが通信し、一方の側に書かれたものは他方の側に出ます。たとえば、getty
のログインプロセスでは、ptyデバイスの片面を使用してシリアル回線と考えることができます。サーバプログラムは、ptyの反対側を処理し、ptyからクライアントに送信するすべてのものを送信する必要がありますネットワークを介して。
ターミナルエミュレータはまたあなたの端子に疑似端末、タイプtty
を使用して、あなたは端末エミュレータを使用している場合は、/dev/pts/9
ような何かを得るでしょう。 ptyの反対側では、通常はあなたのシェルで、pty経由で端末エミュレータと通信します。
お客様のクライアントプログラムは、多かれ少なかれ標準入力と標準出力を使用できます。あなたの端末情報が正しい場合、残りは端末エミュレータで処理され、サーバプログラムから受け取ったものはstdout
に渡し、読み取ったものはサーバプログラムにstdin
から送信します。
うまくいけば、私は重要な細部を省きませんでした。がんばろう!
出典
2013-05-06 22:00:57
ldx