Terminal

當程序寫入偽終端從機時,為什麼它不讀取它寫的內容?

  • March 6, 2021

這是我的 bash 會話:

lrwx------ 1 stas stas 64 Mar  5 18:18 0 -> /dev/pts/0
lrwx------ 1 stas stas 64 Mar  5 18:18 1 -> /dev/pts/0
lrwx------ 1 stas stas 64 Mar  5 18:18 2 -> /dev/pts/0

我們看到 bash 既可以讀取也可以寫入/dev/pts/0. 我的問題是:這個過程為什麼不讀取它剛剛在那裡寫的內容?是什麼讓只master pty接收數據?

/dev/pts/0不是正常文件而是字元設備節點,如ls -l輸出的第一列所示:

v
crw--w---- 1 tilman tty  136, 0 Mär  6 20:25 /dev/pts/0

因此,讀寫操作不是訪問磁碟上的某個文件,而是由一個稱為設備驅動程序的軟體處理,該軟體幾乎可以做任何作者想讓它做的事情,從根本上什麼都不做(如在後面的驅動程序的情況/dev/null)來詳細說明對電腦中某些硬體的操作(如實際硬體驅動程序的情況。)

在該/dev/pts/0驅動程序的特定情況下寫入(非常簡化):

  • 如果一個程序將一些數據寫入從設備,則將該數據作為結果提供給主設備上的下一次讀取操作。
  • 如果一個程序將一些數據寫入主設備,則將該數據作為結果提供給從設備上的下一次讀取操作。

不是為了將寫入從設備的數據提供回從設備上的讀取操作,因此不會發生這種情況。

引用自:https://serverfault.com/questions/1056082