私の質問は、ptyの仕組みではなく、ptyの概念とデザインについてです。 「Linuxプログラミングインタフェース」の本の第64章(疑似ターミナル)を読んでいますが、なぜ私たちが1つの代わりに擬似ターミナルペア(ptmx、pts)を使用しているのかわかりません。 /dev/tty[1,6] を見ると、仮想端末がエミュレートされ、ファイルを使用しています。疑似端末で同じことを行い、2つではなく1つのファイルを使って模擬システムを設計してみてはいかがでしょうか?
答え1
私も最初はこの質問について混乱していましたが、今この質問に対する概念的(そして実際的な)答えを理解したと信じています。
これには、コミュニケーションに関わる2人の関係者がいます。デバイスがある場合はループバックのように動作し、同じデバイスに記録されているすべてのコンテンツをエコーします。これにより、どちらの側も誰がデータを送信したかを知ることが困難になります(誰もがすぐに送信されたデバイスに記録されたばかりのデータを見ることができます)。
概念的には、各当事者が他のデバイスに接続されている1つのデバイスで書き込み/読み取りを行うことによって解決されます。
答え2
到着宣伝するTTYサブシステム(セッション管理と回線規律)をそのまま維持しながら、端末エミュレーションをユーザー領域に移動するために擬似端末またはptyが発明されました。
Linus Akessonという人がいました。TTY公開フルイメージページです。 (Arch Linux Wikiを追加することで見つけました:mosvyはそれを嫌うようです...)。
数日が過ぎた今でも、上に引用された答えが気に入っています。 Wikipediaにもリンクがあります。少し議論した後(残念ながらコメントを参照)、次の内容を自由に編集しました。違いは「Edit...」ボタンで確認できます。 「PTMX」と「TTY Subsystem」は新しい単語です。良い公式(?)ソース: drivers/tty/Kconfig
そして「ターミナルエミュレーションユーザーエリア「これはxtermなどです。XTermは、Xとウィンドウマネージャと一緒に、「bash」がLinux VTで実行されているように感じるようにする必要があります。
Xがユーザー空間で「すべて」を処理する直接的な結果:多くのxterm / bashを起動した後、各xtermはpts / 0に接続され、各bashはpts / 1、pts / 2に接続されます。内部から始めることもできます。 .orを使用する子xterms / bashは、xterm &
xterm内で新しいシェル階層を起動しますbash
。それにもかかわらず、ユーザーは依存関係をすばやく追跡できません。簡単シェル付きウィンドウを作成するためにPTYを使用していますか?
「TTYサブシステム」のVT(= VC)がより多く使用されています。変化のない、(最初の?)制限は64で、開始後は6のみ設定されます。getty/agetty
(「open tty port、...」)の観点からは、異なって見える場合があります。
以下は、主な5つの特殊ファイルです/dev
。
crw-rw-rw- 1 root tty 5, 0 tty
crw------- 1 root root 5, 1 console
crw-rw-rw- 1 root tty 5, 2 ptmx
そうなんですか?この用語は、すべての新しいptyが「p」ファイルと「s」ファイルに含まれているPTYのBSDバージョンに由来するようです。 UNIX98_PTYの場合、次のようになります。
/dev/ptmx:MX良い二重(MASTER Xではありません)コンセプトコンソール用です。そして顧客のために/dev/pts/1-n
。 ~の/dev/pts/0今は何も言いたくありません。忙しいマスターの一人と忙しい奴隷。一対一の関係ではなく一対多の関係に近い。
これら3つの主な= 5文字のデバイス特殊ファイルは実際には特殊特殊ファイル。ファイルでは多くのことはしません。しかし、すべてのデバイスファイルの背後にはいくつかのコードがあり、ここではdrivers/tty/*.c
キーボード処理が大きな問題ではありません。 VTスイッチングとライン規律が同時に存在することもあります。
/dev/pts/
他のptmxファイルとすべてのMajor = 136スレーブデバイスファイルを含むディレクトリがあります。一般に/dev/ttyN
専門家=4です。
ioctl_console
(削除された?)コメントから派生した:これは他のQで議論されている要求の1つです。「ttyは仮想端末ではありません」、SKは言うioctl VT_GETSTATE...ttyはvtではありません。(最後にコメントああ、すみません)
VT_GETSTATE
Get global vt state info. argp points to a
struct vt_stat {
unsigned short v_active; /* active vt */
unsigned short v_signal; /* signal to send */
unsigned short v_state; /* vt bit mask */
};
For each vt in use, the corresponding bit in the v_state mem‐
ber is set. (Kernels 1.0 through 1.1.92.)
config UNIX98_PTY
送信者(ドライバ/ ttyのKconfig)
メインサイトの代表的なプログラムはTelnetサーバーとxtermsです。
xtermではなく/dev/pts/1-255を取得するのはbashプロセスです。 xtermとwmはxとbashの間の仲介者です。これはイナと最初からxinit wm x
共同努力した結果だxinit client -- server display
。