Linux

BSD 風格的偽終端與 UNIX 98 的偽終端

  • November 23, 2017

根據我對 Linux 中偽終端的了解,有兩種類型的偽終端:BSD 風格的偽終端(已棄用)和UNIX 98 偽終端

我創建了兩張圖片,展示了我對這兩種偽終端的理解。

下圖顯示了 BSD 風格的偽終端是如何工作的(如果圖像錯誤,請糾正我):

在此處輸入圖像描述

這種類型的偽終端並不難理解,每個終端都連接到一個唯一的主驅動程序。


但是在 UNIX 98 偽終端中,事情有點混亂。下圖顯示了我認為這種類型的偽終端是如何工作的:

在此處輸入圖像描述

所以基本上所有終端都使用相同的主驅動程序(/dev/ptmx),但我不確定主驅動程序如何知道如何執行以下操作:

  • 如果數據是從終端程序之一發送的,主驅動程序如何知道數據應該傳遞給哪個 TTY 從驅動程序?
  • 如果數據是從 TTY 從驅動程序之一發送的,主驅動程序如何知道數據應該傳遞到哪個終端程序?

主驅動程序是否知道如何以我在圖像中顯示的方式執行此操作(即主驅動程序有一個映射表,將每個終端 PID 映射到其相應的 TTY 從驅動程序)?

你對名字非常著迷。/dev/ptmx不是“驅動程序”,它只是文件系統中的一個名稱,具有特殊含義。

一個程序通過呼叫打開一個新的master pty posix_openpt(),它返回一個文件描述符;open()呼叫on也可以達到同樣的效果/dev/ptmx。每次創建一個open()的偽終端的程序呼叫;當沒有更多程序打開此文件描述符時,偽終端將被銷毀。此文件描述符指的是偽終端的主端,並且可以像任何其他文件描述符一樣傳遞給後代程序。/dev/ptmx

有關更多詳細資訊,請參閱unix.stackexchange.com/questions/117981。(向@JdeBP 致敬以獲得建議。)

一旦一個程序有一個文件描述符指向偽終端的主端,它可以通過呼叫找到偽終端的從端的名稱ptsname(),並可以通過這個偽終端將這個名稱傳遞給它想要控制的任何程序。

引用自:https://unix.stackexchange.com/questions/405972