kazmax - Linux で自宅サーバー

pty - 約束事その他の説明 - Linux コマンド集 一覧表

  1. 名前
  2. 説明
  3. 注意
  4. ファイル
  5. 関連項目

名前

pty - 擬似端末インタフェース

説明

擬似端末 (pseudo-terminal) は、双方向通信チャンネルを提供する 仮想キャラクタデバイスのペアである。 チャンネルの一方の端点は マスタ (master) と呼ばれ、もう一方の端点は スレーブ (slave) と呼ばれる。 擬似端末のスレーブは、伝統的な端末と全く同じ動作をするインタフェースを 提供する。端末に接続されることを想定しているプロセスは擬似端末の スレーブをオープンすることができ、それ以降はマスタ側をオープン しているプログラムからそのプロセスを制御することができる。 端末で入力されたのと同じように、 マスタ側に書き込まれた全てのデータは、スレーブ側のプロセスに送られる。 例えば、マスタデバイスに割り込みキャラクタ (通常は control-C) を書き込むと、 スレーブに接続されているフォアグラウンド・プロセスグループに対して 割り込みシグナル (SIGINT) が生成される。 反対に、擬似端末のスレーブ側に書き込まれた全てのデータは、 マスタ側に接続されているプロセスから読み出すことができる。 擬似端末は、ネットワークログインサービス ( ssh (1), rlogin (1), telnet (1))や端末エミュレータ、   script (1),   screen (1),   expect (1) などのアプリケーションで使用されている。
歴史的に見ると BSD と System V の2種類の擬似端末の API が発展してきている。 SUSv1 は System V API に基づいた擬似端末 API を標準化しており、 擬似端末を使用する新しいプログラムはすべてこの API を採用すべきである。
Linux では BSD 風と (標準化された) System V 風の擬似端末を提供している。 System V 風の端末は、Linux システムでは一般に Unix 98 擬似端末と呼ばれている。 カーネル 2.6.4 以降では、BSD 風の擬似端末は廃止予定とみなされている (カーネルのコンフィギュレーションで BSD 風の擬似端末を無効にすることができる)。 新しいアプリケーションでは、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" に置き換えたものである)。

注意

パケット・モード操作の制御を行う TIOCPKT ioctl ()の説明は   tty_ioctl (4) に書かれている。
BSD ioctl() の TIOCSTOP, TIOCSTART, TIOCUCNTL, TIOCREMOTE は これまでのところ Linux では実装されていない。

ファイル

/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 スレーブデバイス)

関連項目