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