第7版 Unix 端末インターフェース

7版Unix端末インターフェースは、プログラム用のアプリケーションプログラミングインターフェースと、ユーザーの動作期待値の両方を含む、第7版Unixで歴史的に利用可能であった端末の一般化された抽象化です。これは、 POSIX端末インターフェースによって大部分が置き換えられました

概念と概要

Seventh Edition Unix およびUNIX/32Vで提供され、BSDバージョン 4でも旧端末ドライバとして提供された端末インタフェースは、主にテレタイプライタを端末として使用することを想定したシンプルなものでした。入力は 1 行ずつ行われ、オペレーティングシステム内の端末ドライバ (端末自体ではなく) が簡単な行編集機能を提供していました。編集はカーネルによってバッファが維持され、そこで行われました。端末入力を読み取るアプリケーションは、return行編集を終了するキーが端末上で押されたときにのみ、バッファの内容を受け取りました。端末からシステムに送信されるキーは、編集バッファの現在の内容全体を消去 ("kill") し、通常は ' ' 記号に続いて改行シーケンスとして表示され、印刷位置を新しい空白行に移動します。端末からシステムに送信されるキーは、編集バッファの末尾の最後の文字を消去し、通常は「」記号として表示されます。これは、前の文字を「消去」することを意味するため、ユーザーはこれを認識する必要があります(テレタイプライターは、紙に印刷された文字を物理的に消去することはできません)。[1] [2] [3] [4] [5]@@##

プログラミングの観点から見ると、端末デバイスには、送信および受信ボーレート、"erase" および "kill" 文字 (前述のように行編集を実行する)、"interrupt" および "quit" 文字 (端末が制御端末となっているすべてのプロセスに信号を生成する)、"start" および "stop" 文字 (ソフトウェアフロー制御に使用)、"end of file" 文字 (システムコールによってバッファから破棄されるためread()、長さがゼロの結果が返される可能性があることを除けばキャリッジリターンのように動作する)、およびカーネルの端末ドライバによってローカルエコーがエミュレートされるかどうか、モデムフロー制御が有効かどうか、さまざまな出力遅延の長さ、キャリッジリターン文字のマッピング、および 3 つの入力モードを決定するさまざまなモードフラグがありました。[6]

入力モード

第 7 版 Unix の端末には次の 3 つの入力モードがありました。

ラインモード(「クック」モードとも呼ばれる)
ラインモードでは、ラインディシプリンはすべての行編集機能を実行し、「割り込み」および「終了」制御文字を認識してプロセスに送信されるシグナルに変換します。端末から読み取るアプリケーションプログラムは、ユーザーがリターンキーを押して行編集を完了した後、行全体を受け取ります。[2] [7]
cbreakモード
cbreakモードは、2つの文字単位モードのうちの1つです。(Stephen R. Bourneは冗談めかして、このモードを「半端に」、つまり「珍しい」モードと呼んでいました(Bourne 1983、p. 288)。ラインディシプリンは行編集を行わず、行編集機能の制御シーケンスは通常の文字入力として扱われます。端末から読み取るアプリケーションプログラムは、入力キューに読み込み可能な文字が現れ次第、直ちに文字を受け取ります。ただし、「割り込み」および「終了」制御文字、そしてモデムフロー制御文字は、依然として特別な処理が行われ、入力ストリームから削除されます。[8] [9]
生モード
rawモードは、2つの文字単位モードのうちのもう1つです。ラインディシプリンは行編集を行わず、行編集機能の制御シーケンスと各種特殊文字(「割り込み」、「終了」、フロー制御)は通常の文字入力として扱われます。端末から文字を読み取るアプリケーションプログラムは、文字を即座に受信し、端末デバイス自体から送信されたのと全く同じ文字ストリーム全体をそのまま受け取ります。[10] [8] [9]

POSIX端末インターフェースでは、これらのモードは、標準入力モードと非標準入力モードの2つの入力モードのみで構成されるシステムに置き換えられました。POSIX端末インターフェースにおけるシグナル生成特殊文字の扱いは入力モードとは独立しており、個別に制御可能です。

制御端末

第 7 版 Unix では、ターミナルジョブ制御はなくプロセス グループは現在考えられているものとは異なるものと考えられていました。

システム内のプロセスは、単一の制御端末を持つか、制御端末を全く持たないかのいずれかでした。プロセスは親から制御端末を継承します。制御端末を持たないプロセスが、他のプロセスの制御端末ではない端末デバイスファイルを取得したときに、制御端末が取得されましたopen()同じ制御端末を持つすべてのプロセスは、単一のプロセスグループに属していました。[11]

アプリケーションプログラミングインターフェース

これらすべてのモードと制御文字を問い合わせ、変更するためのプログラム・インターフェースは、ioctl()システム・コールでした。(これは、第 6 版 Unix のシステム・コールstty()とシステム・コールに代わるものです。) [12] [13] 「消去」文字と「キル」文字は、第 7 版以降長年、開発の惰性により、端末デバイス・ドライバーや多くの Unix システムではデフォルトであらかじめ設定されており端末デバイスの設定を変更するのはログイン・プロセスの一部、つまりユーザーがユーザー名とパスワードを入力した後に実行されるシステム・ログイン・スクリプトのみでした。ログインおよびパスワードのプロンプトで間違いがあった場合は、テレタイプライター端末から継承された従来の編集キー文字を使用して修正する必要がありました。[4]gtty()#@

値が固定され定義された記号定数とプログラムインターフェースのデータ構造定義はsgtty.hシステムヘッダーで定義されました。[8]

ioctl()操作

操作ioctl()は次のとおりでした。

ioctl()端末機器の操作
シンボル 3番目の引数が指す構造体 説明
TIOGETP sgttyb 端末パラメータをデータ構造に照会する
TIOSETP sgttyb データ構造から端末パラメータを設定し、まず保留中の出力をすべて排出し、キューに入れられた入力をフラッシュする
TIOSETN sgttyb 待機やドレインなしでデータ構造から端末パラメータを設定する
TIOCEXCL なし 「専用使用」モードをオンにする
TIOCNXCL なし 「排他使用」モードをオフにする
TIOCHPCL なし 「最後の終了時に切断」モードをオンにする
TIOCFLUSH なし すべての出力キューと入力キューをフラッシュする
TIOGETC tchars 端末パラメータをデータ構造に照会する
TIOSETC tchars データ構造から端末パラメータを設定する

データsgttyb構造

端末システムコールで使用されるデータ構造の1つはsgttyb構造体であり、そのCプログラミング言語での定義は次の通りである。[14]

struct sgttyb { char sg_ispeed ; // 入力速度char sg_ospeed ; // 出力速度char sg_erase ; // 文字の消去char sg_kill ; // 文字の削除char sg_flags ; // 制御フラグ};  
         
         
          
           
          

POSIX端末インターフェースとは異なり、第7版Unix端末インターフェースは入力ボーレートと出力ボーレートをデータ構造に直接記録しました。[15]

sg_ispeedおよびフィールド入出力速度はDEC DH -11の速度であり、0から15の数字でsg_ospeed記号定数(昇順)で表されます。ボーレートは名前の通りですB0(最後の2つは「外部A」と「外部B」)。ボーレートを0に設定する、端末ドライバはモデム切断します(端末がモデムデバイスの場合)。[14]B50B75B110B134B150B200B300B600B1200B1800B2400B4800B9600EXTAEXTB

およびフィールドはsg_erasesg_killそれぞれ「消去」文字と「削除」文字の文字値であり、それぞれ「#」と「@」の(ASCII)値がデフォルトになっています。[14]

このsg_flagsフィールドでは、次の表に示すように、さまざまな入力および出力制御フラグが指定されます。

データ構造sg_flagsのフィールドのフラグ[3]sgtty
シンボル 8進数値 説明
BSDELAY 0100000 BS文字の 書き込み時の遅延
BS0 0000000
BS1 0100000
VTDELAY 0040000 VTおよびFF文字の 書き込み時の遅延
FF0 0000000
FF1 0040000
CRDELAY 0030000 CR文字の 書き込み時の遅延
CR0 0000000
CR1 0010000
CR2 0020000
CR3 0030000
TBDELAY 0006000 TAB文字を書き込むときの遅延は、技術的には遅延を指定するものではなく、タブ文字を 1 つ以上のスペース文字のシーケンスに変換します。
XTABS
TAB0 0000000
TAB1 00002000
TAB2 0004000
XTABS 0006000
NLDELAY 0001400 LF文字の 書き込み時の遅延
NL0 0000000
NL1 00000400
NL2 0001000
NL3 0001400
EVENP 0000200 偶数パリティ
ODDP 0000100 奇数パリティ
RAW 0000040 「生」モード
CRMOD 0000020 キャリッジリターンマッピングモード(入力時にCRはLFにマッピングされ、出力時にCRLF の両方がCR + LFに変換されます
ECHO 0000010 端末ドライバによる ローカルエコーエミュレーション
LCASE 0000004 入力時に大文字を小文字にマッピングする
CBREAK 0000002 「cbreak」モード
TANDEM 0000001 モデムフロー制御を有効にする

データtchars構造

端末システムコールで使用されるデータ構造の1つはtchars構造体であり、そのCプログラミング言語での定義は次の通りである。[16]

struct tchars { char t_intrc ; // 割り込みchar t_quitc ; // 終了char t_startc ; // 開始char t_stopc ; // 停止char t_eofc ; // ファイルの終わりchar t_brkc ; // ブレーク(同じ効果を持つハードワイヤード LF 文字の代替)};  
           
           
          
           
            
            

これらのフィールドの値は、プログラムで設定可能な様々な特殊文字の値でした。いずれかのフィールドに-1の値を設定すると、端末ドライバによる認識が無効になります。[16]

参考文献

  1. ^ ボーン 1983年、8ページ。
  2. ^ ボーン1983年、130~131ページより。
  3. ^ ボーン 1983年、287ページより。
  4. ^ ab Christian 1988、26ページ。
  5. ^ レフラーら。 1989 年、p. 262.
  6. ^ ボーン 1983年、132~133ページ。
  7. ^ レフラーら。 1989 年、p. 259~260。
  8. ^ abc ボーン 1983年、288ページ。
  9. ^ ab Leffler et al. 1989, p. 260.
  10. ^ ボーン 1983年、132ページ。
  11. ^ ボーン 1983年、130ページ。
  12. ^ ボーン 1983年、133ページ。
  13. ^ クリスチャン1988年、393ページ。
  14. ^ abc ボーン 1983年、286ページ。
  15. ^ ズロトニック 1991、166ページ。
  16. ^ ボーン 1983年、289ページより。

参考文献

  • ボーン, スティーブン・R. (1983). UNIXシステム. 国際コンピュータサイエンスシリーズ. アディソン・ウェスレー. ISBN 978-0-201-13791-0
  • クリスチャン・カーレ(1988年)『UNIXオペレーティングシステム(第2版)』John Wiley & Sons. ISBN 978-0-471-84781-6
  • レフラー, サミュエル・J.、マクキューシック, マーシャル・カーク、カレルズ, マイケル・J.、クォーターマン, ジョン・S. (1989). 「端末処理」. UNIXオペレーティングシステム4.3BSDの設計と実装. アディソン・ウェスリー社, コンピュータサイエンスシリーズ. アディソン・ウェスリー. ISBN 978-0-201-06196-3
  • ズロトニック、フレッド (1991). 「端末デバイスの制御」. POSIX.1 標準:プログラマーズガイド. ベンジャミン/カミングス出版. ISBN 978-0-8053-9605-8
「https://en.wikipedia.org/w/index.php?title=Seventh_Edition_Unix_terminal_interface&oldid=1331120828」から取得