PTY
Section: Linux Programmer's Manual (7)
Updated: 2020-08-13
Index
JM Home Page
roff page
名前
pty - 擬似端末インターフェース
説明
擬似端末 (pseudoterminal; "pty" と略されることもある) は、
双方向通信チャンネルを提供する仮想キャラクターデバイスのペアである。 チャンネルの一方の端点は マスタ (master)
と呼ばれ、もう一方の端点は スレーブ (slave) と呼ばれる。
擬似端末のスレーブは、伝統的な端末と全く同じ動作をするインターフェースを 提供する。端末に接続されることを想定しているプロセスは擬似端末の
スレーブをオープンすることができ、それ以降はマスタ側をオープン しているプログラムからそのプロセスを制御することができる。
端末で入力されたのと同じように、 マスタ側に書き込まれた全てのデータは、スレーブ側のプロセスに送られる。 例えば、マスタデバイスに割り込みキャラクター
(通常は control-C) を書き込むと、 スレーブに接続されているフォアグラウンドプロセスグループに対して 割り込みシグナル
(SIGINT) が生成される。 反対に、擬似端末のスレーブ側に書き込まれた全てのデータは、
マスタ側に接続されているプロセスから読み出すことができる。
Data flow between master and slave is handled asynchronously, much like data
flow with a physical terminal. Data written to the slave will be available
at the master promptly, but may not be available immediately. Similarly,
there may be a small processing delay between a write to the master, and the
effect being visible at the slave.
歴史的に見ると BSD と System V の2種類の擬似端末の API が発展してきている。 SUSv1 は System V API
に基づいた擬似端末 API を標準化しており、 擬似端末を使用する新しいプログラムはすべてこの API を採用すべきである。
Linux では BSD 風と (標準化された) System V 風の擬似端末を提供している。 System V 風の端末は、Linux
システムでは一般に UNIX 98 擬似端末と呼ばれている。
カーネル 2.6.4 以降では、BSD 風の擬似端末は廃止予定とされている。この機能は、カーネル作成時に CONFIG_LEGACY_PTYS
オプションを無効にすることで無効にできる (Linux 2.6.30
以降では、メインラインのカーネルでは、このオプションはデフォルトで無効になっている)。新しいアプリケーションでは、UNIX 98
擬似端末を使用すべきである。
UNIX 98 擬似端末
未使用の UNIX 98 擬似端末マスタをオープンするには posix_openpt(3) を呼び出す (この関数はマスタクローンデバイス
(master clone device), /dev/ptmx をオープンする; pts(4) を参照)。
プログラム固有の初期化処理を実行し、 grantpt(3) を使ってスレーブデバイスの所有権や許可を変更し、 unlockpt(3)
を使ってスレーブのロック解除を行うと、 ptsname(3) が返す名前を渡して open(2) を呼び出すことにより
対応するスレーブデバイスをオープンできるようになる。
Linux カーネルでは、利用できる UNIX 98 擬似端末の数に上限を設けている。 2.6.3
以前のカーネルでは、この上限はカーネルのコンパイル時の設定 (CONFIG_UNIX98_PTYS) である。許可される擬似端末の数は最大
2048 であり、 デフォルトの設定は 256 である。 カーネル 2.6.4 以降では、この上限は
/proc/sys/kernel/pty/max 経由で動的に調整可能となっている。また、 /proc/sys/kernel/pty/nr
で現在使用中の擬似端末の数を取得できる。 この 2つのファイルの詳細は proc(5) を参照。
BSD 擬似端末
BSD 風の擬似端末はあらかじめ作成されたペアとして提供される。その名前は /dev/ptyXY (マスタ側)、 /dev/ttyXY
(スレーブ側) である。ここで、 X は [p-za-e] の 16文字のうちの一文字、 Y は [0-9a-f] の 16文字のうちの一文字である
(X, Y に使われる文字の正確な範囲は UNIX の実装により異なる)。 例えば、 /dev/ptyp1 と /dev/ttyp1 は
BSD 擬似端末ペアを構成する。 プロセスが未使用の擬似端末ペアを見つけるには、 各擬似端末のマスタの open(2) を試み、open
が成功するまでこれを繰り返す。 マスタを open すると、対応する擬似端末のスレーブも open できるようになる (スレーブの名前は、マスタの名前の
"pty" を "tty" に置き換えたものである)。
ファイル
- /dev/ptmx
-
UNIX 98 マスタクローンデバイス
- /dev/pts/*
-
UNIX 98 スレーブデバイス
- /dev/pty[p-za-e][0-9a-f]
-
BSD マスタデバイス
- /dev/tty[p-za-e][0-9a-f]
-
BSD スレーブデバイス
注意
擬似端末は、ネットワークログインサービス (ssh(1), rlogin(1), telnet(1)) や
端末エミュレータ (xterm(1), script(1), screen(1), tmux(1),
unbuffer(1), expect(1) など) のアプリケーションで使用されている。
パケットモード操作の制御を行う TIOCPKT ioctl(2) の説明は ioctl_tty(2) に書かれている。
BSD ioctl(2) の TIOCSTOP, TIOCSTART, TIOCUCNTL, TIOCREMOTE
はこれまでのところ Linux では実装されていない。
関連項目
ioctl_tty(2), select(2), setsid(2), forkpty(3), openpty(3),
termios(3), pts(4), tty(4)
この文書について
この man ページは Linux man-pages プロジェクトのリリース 5.10 の一部である。プロジェクトの説明とバグ報告に関する情報は
https://www.kernel.org/doc/man-pages/ に書かれている。
Index
- 名前
-
- 説明
-
- UNIX 98 擬似端末
-
- BSD 擬似端末
-
- ファイル
-
- 注意
-
- 関連項目
-
- この文書について
-
This document was created by
man2html,
using the manual pages.
Time: 16:46:42 GMT, November 24, 2023