pty
ドライバは
疑似端末
と呼ばれるデバイス対のサポートを提供します。
疑似端末とは、
マスタ
デバイスと
スレーブ
デバイスという
一対のキャラクタ型デバイスです。
スレーブデバイスは、
tty(4)
に記述されているものと同一のインタフェースをプロセスに提供します。
ただし、
tty(4)
に記述されるインタフェースを提供するような他のデバイスはすべて、
根底に何らかのハードウェアデバイスを持つのに対し、
スレーブデバイスは疑似端末のマスタ側を通じて別のプロセスに操作されます。
つまり、マスタデバイスに書き込まれた内容は
すべてスレーブデバイスへ入力として送られ、
スレーブデバイスに書き込まれた内容は
すべてマスタデバイスへ入力として渡されます。
カーネル設定ファイル中の指定にオプションの
count
を与えると、その数だけ疑似端末の組が構成されます。
count のデフォルトは 32 です。
次に挙げる
ioctl(2)
呼び出しは疑似端末にのみ適用できます:
TIOCSTOP
|
端末への出力を止めます (例えば
‘^S’
を押すように)。
パラメータは取りません。
|
TIOCSTART
|
(
TIOCSTOP
か
‘^S’
を押すことで止められていた
) 出力を再開します。
パラメータは取りません。
|
TIOCPKT
|
パケット
モードを有効/無効にします。
パケットモードは非 0 のパラメータを指定 (参照渡し) すると有効になり、
0 を指定 (参照渡し) すると無効になります。
疑似端末のマスタ側に適用された場合、以後端末から
read(2)
を呼び出すと、1 個の 0 バイト (シンボル定義では
TIOCPKT_DATA
) に続いて疑似端末のスレーブ側に書き込まれたデータが返されるか、
あるいは制御状態情報を表す単一バイトが返されるようになります。
後者の場合、返されるバイトは次のビットの 0 個以上の和 (OR) になります:
|
TIOCPKT_FLUSHREAD
|
端末の読み込みキューがフラッシュされたとき
|
TIOCPKT_FLUSHWRITE
|
|
端末の書き込みキューがフラッシュされたとき
|
TIOCPKT_STOP
|
端末への出力が
‘^S’
のようにして止められたとき
|
TIOCPKT_START
|
端末への出力が再開されたとき
|
TIOCPKT_DOSTOP
|
t_stopc
が
‘^S’
で
t_startc
が
‘^Q’
となったとき
|
TIOCPKT_NOSTOP
|
START 文字、STOP 文字が
‘^S/^Q’
でなくなったとき
このモードが有効な間、
マスタ側から読み込まれる制御状態情報の存在は
select(2)
で例外条件として検出できます。
rlogin(1)
や
rlogind(8)
はこのモードを用いて、
リモート側でエコーしローカル側で
‘^S/^Q’
フロー制御する、出力のバックフラッシュが適切に行なわれる
リモートログイン機構を実装しています。
その他の似たプログラムでもこのモードが利用できます。
|
TIOCUCNTL
|
少数の単純なユーザ
ioctl(2)
コマンドを、
TIOCPKT
と似たプロトコルを用いて疑似端末を通して渡すことのできるモードを、
有効/無効にします。
TIOCUCNTL
モードと
TIOCPKT
モードは互いに排他的です。
このモードは疑似端末のマスタ側から設定します。
非 0 のパラメータを指定 (参照渡し) すると有効になり、
0 を指定 (参照渡し) すると無効になります。
以後マスタ側から
read(2)
を呼び出すと、
1 個の 0 バイトに続いて疑似端末のスレーブ側に書き込まれたデータが返されるか、
あるいはスレーブ側のユーザ制御操作を表す単一のバイトが返されるようになります。
ユーザ制御コマンドは、データを持たない特別な
ioctl(2)
操作で構成されます。コマンドは
UIOCCMD(n)
の形で渡します。ここで、
n
は 1 から 255 の範囲の数字です。
操作値
n
は、マスタ側からの次回の
read(2)
により単一バイトとして受け取られます。
ioctl(2)
UIOCCMD(0)
は何も操作は行いませんが (no-op)、
この機能の有無を調べるために使えます。
TIOCPKT
モードの場合と同様、コマンド操作は
select(2)
で例外条件として検出できます。
|
TIOCREMOTE
|
疑似端末のマスタ側用のモードで、
TIOCPKT
とは独立です。
このモードでは (端末のモードに関わらず)、
疑似端末への入力をフロー制御し、入力編集を行わないようにします。
制御端末へ書き込みを行うと、
その端末から読み込むプロセスのためにレコード境界が作られます。
通常の使用では、
データの書き込みはそのデータが端末から行入力されたようになり、
0 バイトの書き込みはファイル終了文字が入力されたようになります。
TIOCREMOTE
は、ウィンドウマネージャでリモート行編集を行うときや、
入力をフロー制御する必要のあるときに利用できます。
|