私はLinuxのターミナルサブシステム、特にttyドライバとライン規律を理解しようとしています。明らかに、このサブシステムのアーキテクチャは、テレタイプマシン(tty)がコンピュータに接続され、コンピュータにデータを入力し、プロセスから応答を受けた時代に由来しました。
私は実際の歴史的なttyを研究したことがなく、そのようなttyがどのように機能するかを理解すると、ttyドライバの内部動作をよりよく理解できると信じています。
特に興味があります。エコそしてライン編集。
したがって、ttyのオペレータがテキストを入力すると、テキストはttyにエコーされます(紙に1行を印刷することによって)。個々のキー/文字を入力するときにエコーするか、改行/エンターキーを押したときにのみエコーするかどうか。
彼が入力したキー(文字)はすぐにコンピュータに送信されますか(ラインルール?)、またはttyのローカルバッファに保存され、新しいラインキーを押すと送信されます。
オペレータは間違ったテキストをどのように編集できますか(バックスペース、ctrl-h)?バックスペース情報はそれに応じて行が編集されるコンピュータに送信されますか、それともこれはttyの機能ですか(コンピュータはそれを認識しません)。
最後に、オペレータがテキストを入力するとどうなりますか?しかし、ttyはコンピュータからデータを受信していますか?
ベストアンサー1
もともとttyは次のようになりました。ASR33テレタイププライタモデル33.彼らは「愚かな」キーを押すとモデムまたはコンピュータに文字を送信します。その後、コンピュータは文字を再送信して印刷できます。
これはまた、伝送がどれだけうまく機能するかに関するフィードバックを提供する。また、1 つだけ入力すると、コンピューターは 2 つ以上の文字を再送信できます。たとえば、Enter を入力すると、キャリッジリターンが再送され、プリントヘッドが左マージンに移動し、改行が用紙を次の行に移動します。そのため、今日もこのオプションが表示されますstty onlcr
。出力改行をキャリッジリターンと改行に変換。
これがキャリッジリターン(プリントヘッドを戻る)を印刷した後に遅延オプションがある理由です。
エディタを使用して、バックスペースキー、X、および将来のスペースを使用してバックスペースキーをエコーして、最後の文字を削除できます。重複している場合、エディタはさらにコンテンツを削除するために後ろに移動し、新しい文字を入力するとプリントヘッドをもう一度端に配置できます。
stty cooked
エディタにない場合、行ルールはバックスペースキーを使用して行の末尾から文字を削除し、これまで入力された現在の行(したがってパターン)を保持します。stty rprnt
この機能を使用すると、入力したバックスペースキーが適用されるまで、行全体を再印刷する文字を入力できます。