
Linuxの疑似端末について読んだことによると、2種類の疑似端末があります。BSDスタイルの擬似端末(廃止予定)とUNIX 98擬似端末。
私はこの2種類の疑似端末の理解を示すために2つの画像を作成しました。
次の画像は、BSDスタイルの擬似端末の動作方法を示しています(画像が間違っている場合は修正してください)。
このタイプの疑似端末は理解するのが難しくありません。各端末は独自の基本ドライバに接続されています。
しかし、UNIX 98擬似端末では、状況は少し混乱しています。下の画像は、このタイプの疑似端末がどのように機能するかを示しています。
したがって、デフォルトでは、すべての端末は同じメインドライバ(/dev/ptmx
)を使用しますが、メインドライバがどのように実行するのかわかりません。
データがターミナルプロセスの1つから転送されると、マスタードライバはデータを渡す必要があるTTYスレーブドライバをどのように知ることができますか?
TTYスレーブドライバの1つからデータが転送されると、マスタードライバはデータを渡す必要がある端末プロセスをどのように知ることができますか?
マスタードライバは、画像に表示される方法でこれを行う方法を知っていますか(つまり、マスタードライバには、各端末PIDを対応するTTYスレーブドライバにマッピングするマッピングテーブルがあります)。
答え1
あなたは名前にこだわります。/dev/ptmx
「ドライバ」ではなく、特別な意味を持つファイルシステムの名前にすぎません。
プロセスはposix_openpt()
を呼び出して新しいマスター pty を開きます。open()
これを呼び出して同じ効果を得ることができます/dev/ptmx
。プロセスがopen()
呼び出されるたび/dev/ptmx
に新しい擬似端末を生成します。このファイル記述子が開かれていない場合、疑似端末は削除されます。このファイル記述子は擬似端末の基本的な側面を参照し、他のファイル記述子と同様に子プロセスに渡すことができます。
詳細については、次を参照してください。unix.stackexchange.com/questions/117981。 (提案のために@JdeBPにヒントを与えてください。)
プロセスに疑似端末マスターを指すファイル記述子がある場合は、呼び出しによって疑似端末スレーブの名前を見つけ、ptsname()
その名前を疑似端末を介して制御するすべてのプロセスに渡すことができます。