擬似端末
擬似端末(ぎじたんまつ、英語: pseudo terminal)または疑似ターミナルとは、UNIXにおけるテキスト端末の擬似デバイスのマスター・スレーブのペアである。仮想コンソール、端末装置、シリアルポートハードウェアなどを使用しないテキスト端末のインターフェイスを提供する。これらのハードウェアの代わりに、擬似端末セッションの役割をソフトウェア(プロセス)が代用する。例えば、SSHなどでログインするとこの端末に接続される。
擬似端末の生成
[編集]擬似端末は利用可能なマスターデバイスファイルを開く通常のシステムコールを用いて生成でき、マスターファイルに対するファイルディスクリプタが呼び出し元プロセスに返される。通常ライブラリ関数が存在しており、最初に利用可能なマスターデバイスファイルを開き、対応するスレイブデバイスの権限を初期化する(例: BSD UNIXシステムにおけるopenpty(3))。
BSD PTY
[編集]たとえば最初に利用可能なマスターファイルデバイスが /dev/ptypa である場合、ほとんどのライブラリ関数はマスター(/dev/ptypa)のディスクリプタと対応するスレーブ(/dev/ttypa)のディスクリプタを返し、事前に定義された方法でスレイブ・デバイスの権限を確立する。
一般的には、現在どこかで開かれている擬似端末マスターデバイスは開くことができない。
Unix98 PTY
[編集]multiplexerデバイス(通常 /dev/ptmx)を含むSystem V由来のいくつかのシステムでは、オープンの際に最初の利用可能なマスターデバイスに関連付けられたディスクリプタを返す。スレーブデバイスは /dev/pts/1 などになる。
BSD PTY とは異なり、割り当てで競合したり、開ける数に制限がなかったりするので、現在は Unix98 PTY の方がより頻繁に使われている。
アプリケーション
[編集]擬似端末を利用する重要なアプリケーションとしては、X Window Systemのxtermなどの端末エミュレータや、Mac OS Xなど他のウィンドウ・システムにおける端末アプリケーションが挙げられる。端末エミュレータのプロセスはマスターデバイスに、シェルはスレイブデバイスに関連付けられる。端末エミュレータのセッション内のシェルで行われた操作(端末のリサイズやリセット)は、端末エミュレータ自身のプロセスによって受信され、ハンドルされる。端末エミュレータはウィンドウのイベントを利用してキーボードやマウスからの入力を受け取ることによりこれらのキャラクタをシェルに送信でき、本来のハードウェア・オブジェクト相当の端末エミュレータの外観をシェルに加えている。
また、重要なアプリケーションとしては、擬似端末によって橋渡しされ対応するシェルにとってのマスターとしてサービスを提供するsshやtelnetサーバのようなリモートログインハンドラも挙げられる。
主要なアプリケーションとして他にexpectが挙げられる。多くのプログラムはさまざまなデフォルトのバッファ動作を理由に振る舞いを変えてしまうが、expectではサブプロセスがユーザではなくプログラムによって制御されていることを隠蔽するために擬似端末が利用され、端末に結びついた任意のサブプロセスの自動化を可能にしている。