這一下涉及很多概念:終端,偽終端,虛擬終端,控制終端,串行終端,控制臺,……。歷史原因這些概念有些模糊,我也理不太清楚。就我直觀對dev下設備而言來稍微解釋下:
/dev/tty控制終端,即當前用戶正在使用的終端,是一個映射,指向當前所使用的終端(例如/dev/tty1,/dev/pts/0)。往/dev/tty下寫數據總是寫到當前終端。
/dev/ttyn虛擬終端,例如Ubuntu不啟動圖形界面時,那么就會默認連接到/dev/tty1這個虛擬終端。
/dev/pts/n偽終端,例如網絡登錄的telnet就是使用偽終端。這是UNIX98的實現風格,slave為/dev/pts/n是,master一般為/dev/ptmx。
/dev/pty[p-za-e][0-9a-f]偽終端,這是BSD的實現風格,slave一般使用/dev/tty[p-za-e][0-9a-f]這種格式,而master一般使用/dev/pty[p-za-e][0-9a-f]這種格式。
/dev/ttySn串行終端,串口設備對應的終端。
/dev/console應用層的控制臺,一些進程的打印信息會輸出到控制臺。在用戶層和內核都有一個console,分別對應PRintf和printk的輸出。kernel下的console是輸入輸出設備driver中實現的簡單的輸出console,只實現write函數,并且是直接輸出到設備。user空間下的console,實際就是tty的一個特殊實現,大多數操作函數都繼承tty,所以對于console的讀寫,都是由kernel的tty層來最終發送到設備。
往/dev下各個終端設備寫數據測試:往/dev/ttyn, /dev/pts/n, /dev/ptyn, /dev/ttySn會寫到對應的終端上去。往/dev/tty上寫則會寫到當前終端。往/dev/console寫情況則不太一樣,在ubuntu上測試時(沒啟動圖像界面,啟動的/dev/tty1)會寫到/dev/tty1。板子上則會寫到/dev/ttyS0。
參考:辛星淺析tty、pty與ptslinux中tty、pty、pts的概念區別linux下tty,控制臺,虛擬終端,串口,console(控制臺終端)詳解 終端,虛擬終端和偽終端Linux 串行終端,虛擬終端,偽終端,控制終端,控制臺終端的理解
新聞熱點
疑難解答