日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

终端、虚拟控制台与伪终端

發布時間:2024/1/23 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 终端、虚拟控制台与伪终端 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

(1)在本機上登錄字符界面或者X11圖形界面均為tty終端

(2)通過telnet/ssh遠程登錄或者在X11中生成一個XTERM的終端,均為虛擬終端PTS。

如:

[lujinhong@localhost ~]$ who lujinhong tty2 2013-02-18 22:47 oracle tty1 2013-02-15 23:48 (:0) oracle pts/0 2013-02-15 23:48 (:0.0) lujinhong pts/1 2013-02-18 22:47 (192.168.183.1)此時幾個終端分別為:

(1)在本機上登錄字符界面

(2)在本機上登錄圖形界面

(3)在圖形界面中打開了一個XTERM

(4)遠程TELNET連接

以下內容為轉載:


Linux上許多網絡服務應用,如l2tp、pptp、telnet,都用到了偽終端。有朋友在問這方面的概念,把偶知道的寫下來,以供討論。

一、終端
要理解偽終端(Pseudo Terminal),先來看看什么是“終端”(Terminal)。

終端是一種字符型設備,它有多種類型,通常使用tty來簡稱各種類型的終端設備。

1、串行端口終端(/dev/ttySx)
串行端口終端(Serial Port Terminal)是使用計算機串行端口連接的終端設備。計算機把每個串行端口都看作是一個字符設備。這些串行端口所對應的設備名稱是/dev/ttyS0、/dev/ttyS1等,分別對應于DOS系統下的COM1、COM2等。
[root@Kendo ~]# ls -l /dev/ttyS* crw-rw---- 1 root uucp 4, 64 Jan 8 13:39 /dev/ttyS0 crw-rw---- 1 root uucp 4, 65 Jan 8 13:39 /dev/ttyS1 crw-rw---- 1 root uucp 4, 66 Jan 8 13:39 /dev/ttyS2 crw-rw---- 1 root uucp 4, 67 Jan 8 13:39 /dev/ttyS3
2、控制臺終端(/dev/ttyn, /dev/console)?
在Linux系統中,計算機顯示器通常被稱為控制臺終端(Console)。它仿真了類型為Linux的一種終端(TERM=Linux),與之相關聯的設備文件為:tty0、tty1、tty2……。當用戶從控制臺上登錄時,使用的是tty1。使用Alt+[F1—F6]組合鍵時,我們就可以切換到tty2、tty3……上面去。tty1 –tty6等稱為虛擬終端,而tty0則是當前所使用虛擬終端的一個別名,系統所產生的信息會發送到該終端上。因此不管當前正在使用哪個虛擬終端,系統信息都會發送到控制臺終端上。用戶可以登錄到不同的虛擬終端上去,因而可以讓系統同時有幾個不同的會話期存在。只有系統或超級用戶root可以向/dev/tty0進行寫操作。

作為一個測試例子,在控制臺終端下,運行命令:
#echo "write to ttyS0" > /dev/ttyS0 在串行端口終端中可以看到輸出:
# write to ttyS0

3、控制終端(/dev/tty)?
控制終端并不面對設備,而是面對進程,關于這個概念,《Unix環境高級編程》第9章有詳細論述。


二、從終端登錄簡述


Linux系統引導的時候,會運行init進程,它會執行/etc/inittab(這跟具體的init類型有關,我使用了busybox的init,但其本質是一樣的):
[root@SkyNet ~]# cat /etc/inittab ::sysinit:/etc/init.d/rcS ::respawn:/sbin/getty 9600 ttyS0
它會調用getty在指定波特率上打開ttyS0,即,串行端口終端。打開成功后,stdout,stdin,stderr都被設置到該備上,然后getty輸出:"login:"之類的提示符,等待用戶輸入。

當用戶鍵入用戶名后,getty就執行login程序,類似于:execle("login")。login可以調用getpass()以顯示Password:并讀入用戶口令。并且調用getpwnam進行口令驗證。如果成功,調用類似execle("shell")。這樣,登錄用戶就擁有了一個shell了。


三、偽終端

上述登錄過程,對于網絡用戶來說,卻不能完全實用。很顯然,網絡用戶并不需要一個串口,也不需要一個顯示器,他需要的是在他的本地顯示設備上,運行Linux的shell。以telnetd為例,它至少應該是這樣子的:


?
圖一:telnet登錄假想圖


這里,這個“某個終設備”,自然不可能是一個實際的物理終端設備,因為壓根沒有這樣的設備。這樣,偽終端的概念就被引入進來了。偽終端設備是一種特殊的終端驅動設備, 它并不驅動某個物理設備,而是用來將終端的輸出定向到應用程序中進行處理。偽終端設備之所以存在是為了提供在程序控制下的一種模擬串行終端行為的方法。


偽終端與前面說的終端在表現形式上,最大的不同,就是它總是成對出現,而不是單一的一個。它分為“偽終端主設備(/dev/ptyMN)”和“偽終端從設備”。(/dev/ttyMN)。其中,M與N的命名方式如下:
M: p q r s t u v w x y z a b c d e 共16 個
N: 0 1 2 3 4 5 6 7 8 9 a b c d e f 共16 個

這樣,默認支持最大是256個。

任何寫入到偽終端主設備的輸入,都會作為偽終端從設備的輸入,反之亦然。類似于管道,如下圖:


?

一個典型的偽終端進程結構如下圖:


?
這張圖的關鍵在于:如果把偽終端從設備想像為傳統的終端設備,把主設備看成進程讀寫數據的一個“接口”,那么它的工作原理,就跟傳統終端一樣了。


上述只是一個本地進程,把網絡引入進來,對應到telnetd上面來,應該是下面這個樣子:
?


同樣的登錄方式,就變成了這樣:
1、如果某人在網上使用telnet程序連接到本地服務器,則telnetd程序就可能會開始連接到設備ptyp2(m2)上(一個偽終端主設備上)。
2、telnetd產生一個子進程,進行getty程序,其打開一個對應的從設備對應的ttyp2(s2),并設置stdin\stdout\stderr;
3、telnetd通過內核tcp/ip協議棧從遠端獲取了一個字符時,該字符就會通過m2、s2傳遞給getty程序,而getty程序就會通過s2、m2和telnetd程序往網絡上返回”login:”字符串信息;
4、這樣,登錄程序與telnetd程序就通過“偽終端”進行通信;


四、偽終端的數量
對于Linux下的應用而言,知道偽終端的數量是一個關鍵的東東,或者它直接決定了最大支持用戶數,例如PPTP VPN的應用。(沒有多余的可以供打開的
偽終端設備了)。
對于2.6.X而言,在
Device Drivers ---> Character devices ---> [*] Legacy (BSD) PTY support(256) Maximum number of legacy PTY in use
可以設定。應該將它調整到足夠地大,以供支持應用。同時,/dev目錄下,應該有相應的設備文件:
#ls -l /dev/ptyp* crw-r--r-- 1 root root 2, 0 Dec 18 05:36 /dev/ptyp0 crw-r--r-- 1 root root 2, 1 Dec 18 05:36 /dev/ptyp1 crw-r--r-- 1 root root 2, 2 Dec 18 05:36 /dev/ptyp2 crw-r--r-- 1 root root 2, 3 Dec 18 05:36 /dev/ptyp3#ls -l /dev/ttyp* crw------- 1 root root 3, 0 Dec 18 05:36 /dev/ttyp0 crw------- 1 root root 3, 1 Dec 18 05:36 /dev/ttyp1 crw-r--r-- 1 root root 3, 2 Dec 18 05:36 /dev/ttyp2 crw------- 1 root root 3, 3 Dec 18 05:36 /dev/ttyp3
這樣命令方式,并且要指定數量的方式實在是讓人郁悶。因為它有一個數量上限的問題,最大256。


為了解決這個問題,Linux引入了一種新的命名方式:UNIX98_PTYS。關于這個東東,內核是這樣解釋的:


? ? ? ? Linux has traditionally used the BSD-like names /dev/ptyxx for?masters and /dev/ttyxx for slaves of pseudo terminals. This scheme?has a number of problems. The GNU C library glibc 2.1 and later,?however, supports the Unix98 naming standard: in order to acquire a?pseudo terminal, a process opens /dev/ptmx; the number of the pseudo?terminal is then made available to the process and the pseudo?terminal slave can be accessed as /dev/pts/<number>. What was?traditionally /dev/ttyp2 will then be /dev/pts/2, for example.
? ? ? ? All modern Linux systems use the Unix98 ptys. ?Say Y unless?you're on an embedded system and want to conserve memory.

這樣,可以通過訪問/dev/ptmx設備文件的形式,來訪問偽終端設備了,例如我的PPTP服務器,當有五個用戶撥入后:
# ls -l /dev/pts/ crw------- 1 root root 136, 0 Jan 8 12:18 0 crw------- 1 root root 136, 1 Jan 8 08:08 1 crw------- 1 root root 136, 2 Jan 8 14:10 2 crw------- 1 root root 136, 3 Jan 8 14:27 3 crw------- 1 root root 136, 4 Jan 8 08:29 4


總結

以上是生活随笔為你收集整理的终端、虚拟控制台与伪终端的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 午夜色影院 | 性――交――性――乱a | 欧美顶级少妇做爰 | 黄瓜视频色 | 蜜臀久久99精品久久一区二区 | 国产男女无遮挡猛进猛出 | 少妇精品无码一区二区 | 日韩美一区二区三区 | 在线播放亚洲 | 成人一级黄色片 | 黄色二级毛片 | 四虎影视最新网址 | 极品国产91在线网站 | 日本久久一级片 | 吸咬奶头狂揉60分钟视频 | 在线观看久| 好吊色视频在线观看 | 91亚洲精品国偷拍自产在线观看 | 波多野结衣久久久久 | 亚洲精品日本 | 在线观看aaa | 97国产精品视频人人做人人爱 | 超碰免费人人 | 成人免费无码大片a毛片抽搐色欲 | 综合激情四射 | 爱爱91| 1024手机在线看片 | 中文字幕一区二区三区免费 | 亚洲图片欧美激情 | 久久老熟女一区二区三区 | 欧美丰满老熟妇aaaa片 | 久久人妻少妇嫩草av | 国产精品成人无码专区 | 亚洲精品乱码久久久久久蜜桃图片 | 麻豆视频免费网站 | 中文字幕无码精品亚洲35 | 精品久久久久久亚洲综合网站 | 中文字幕av日韩 | 综合网激情 | 国产精品19乱码一区二区三区 | 欧美日韩一区二区区 | 精品人妻一区二区三区四区不卡 | 日本高清免费看 | 少妇精品无码一区二区 | 大度亲吻原声视频在线观看 | 黄网在线观看免费 | 台湾三级伦理片 | 亚洲羞羞| av成人在线网站 | 亚洲成人tv| 欧美激情18p | 午夜视频网站在线观看 | 日本免费电影一区二区三区 | 黄瓜视频色 | 日韩视频第一页 | 国产女人18毛片水真多18 | 国产色无码精品视频国产 | 91国内揄拍国内精品对白 | 18岁免费观看电视连续剧 | 国产精品熟女久久久久久 | 黄色资源在线播放 | 亚洲产国偷v产偷v自拍涩爱 | 国产伦精品一区二区三区四区视频 | 欧美sm凌虐视频网站 | 欧美人与性动交a欧美精品 日韩免费高清视频 | 亚洲激情啪啪 | 99久久综合网 | 丝袜熟女一区二区三区 | 久久久久亚洲AV成人无码国产 | 日韩视频精品一区 | 香蕉尹人网 | 尤物视频在线看 | 亚洲视频在线观看一区 | 欧州一区二区三区 | a视频| 久久久久女人精品毛片九一 | 国产女主播一区二区三区 | 打白嫩屁屁网站视频短裙 | 中文字幕免费av | 国产同性人妖ts口直男 | 毛片女人 | 蜜桃精品视频在线观看 | 亚洲人人夜夜澡人人爽 | 亚洲天堂免费av | 免费精品视频 | 99热热久久 | 成人午夜性视频 | 日日躁狠狠躁 | 国产色视频在线 | 国产精品一区在线播放 | 久热精品免费视频 | 日本裸体动漫 | 国产精品久久久久91 | 麻豆成人入口 | 久久精品a亚洲国产v高清不卡 | 亚洲干| 日韩免费网址 | 男女污网站 | 久久97|