新聞中心
在Linux系統(tǒng)中,TTY指的是終端機或終端設(shè)備。TTY是一種提供了命令行交互的設(shè)備,它是類Unix操作系統(tǒng)中最基礎(chǔ)的用戶界面。盡管現(xiàn)代的Linux發(fā)行版中很多的GUI(圖形用戶界面),但有些任務(wù)仍然需要在TTY下完成。本文將介紹Linux TTY的原理,同時帶領(lǐng)讀者實現(xiàn)基本的命令行交互。

成都創(chuàng)新互聯(lián)公司是專業(yè)的安源網(wǎng)站建設(shè)公司,安源接單;提供網(wǎng)站制作、成都網(wǎng)站設(shè)計,網(wǎng)頁設(shè)計,網(wǎng)站設(shè)計,建網(wǎng)站,PHP網(wǎng)站建設(shè)等專業(yè)做網(wǎng)站服務(wù);采用PHP框架,可快速的進行安源網(wǎng)站開發(fā)網(wǎng)頁制作和功能擴展;專業(yè)做搜索引擎喜愛的網(wǎng)站,專業(yè)的做網(wǎng)站團隊,希望更多企業(yè)前來合作!
1. TTY的類型
在Linux中,實際存在著多種不同類型的TTY,它們之間存在這些區(qū)別和聯(lián)系。以下是一些常見的TTY類型:
1.1 硬件TTY
硬件TTY通常指的是物理終端設(shè)備,如串口終端、打印終端、普通串口等。Linux系統(tǒng)需要將物理終端映射為一個虛擬TTY,這樣用戶才能使用這些終端。
1.2 虛擬TTY
虛擬TTY通常指的是由操作系統(tǒng)模擬出來的終端設(shè)備,用戶可以連接來自主機或者網(wǎng)絡(luò)上的另一個終端。在Linux中,使用Ctrl+Alt+F1~F6就可以在不同的TTY之間切換。
1.3 偽終端(pty)
偽終端是另一種比較特殊的TTY類型,它由Linux內(nèi)核為了支持遠程登錄而提供的一個抽象設(shè)備。偽終端允許用戶和遠程主機之間進行交互,讓用戶和服務(wù)器之間的通信成為可能。在Linux中,我們可以使用ssh或telnet等協(xié)議連接到遠程主機。在這個連接過程中,偽終端技術(shù)被廣泛使用。
2. TTY的原理
在Linux系統(tǒng)中,終端設(shè)備實際上是由硬件和軟件兩個部分組成的。硬件部分主要指的是物理終端設(shè)備,軟件部分主要指的是Linux內(nèi)核中的TTY驅(qū)動程序。
2.1 Linux內(nèi)核中的TTY驅(qū)動程序
在Linux內(nèi)核中,實現(xiàn)TTY的關(guān)鍵部分就是相關(guān)的驅(qū)動程序。這些驅(qū)動程序負責管理從硬件終端設(shè)備到虛擬終端之間的所有交互。對于一些常見的終端設(shè)備,如串口和鍵盤,Linux內(nèi)核已經(jīng)提供了相應(yīng)的驅(qū)動程序。
2.2 終端設(shè)備的讀寫
在Linux中,應(yīng)用程序和終端設(shè)備之間的通信都是通過流的形式傳遞的。例如,當我們在終端輸入一個字符時,它會被以流的形式發(fā)送到應(yīng)用程序中。相反,當應(yīng)用程序向終端設(shè)備輸出數(shù)據(jù)時,它也是以流的形式進行的。
在Linux系統(tǒng)中,流式通信是由內(nèi)核來保證的。在掌握如何使用終端設(shè)備之前,有必要了解一下流的概念。流分為字符流和塊流兩種。字符流是像鍵盤或串口一樣處理一個字符一個字符的流,而塊流是像硬盤或網(wǎng)絡(luò)連接一樣處理一個數(shù)據(jù)塊一個數(shù)據(jù)塊的流。由于TTY主要處理的是字符流,因此我們這里只介紹字符流的實現(xiàn)。
對于TTY設(shè)備的讀寫操作,內(nèi)核使用了兩個重要的數(shù)據(jù)結(jié)構(gòu),一個是tty_struct結(jié)構(gòu)體,另一個是file_operations結(jié)構(gòu)體。tty_struct結(jié)構(gòu)體用于存儲TTY設(shè)備的相關(guān)信息,例如終端類型、設(shè)備地址等;而file_operations結(jié)構(gòu)體中則保存了關(guān)于TTY設(shè)備讀取和寫入的函數(shù)指針。
2.3 終端設(shè)備的控制
除了讀寫數(shù)據(jù)外,終端設(shè)備還需要能夠控制一些特殊的功能,如換行、清屏等。為了實現(xiàn)這些功能,Linux內(nèi)核使用了控制字符。控制字符是一些轉(zhuǎn)義序列,它們是用一些特殊的字符組合而成的。例如,Ctrl+C組合鍵就會產(chǎn)生一個控制字符,它用于中斷正在運行的程序。
在終端設(shè)備中,一些比較常見的控制字符有Ctrl+C、Ctrl+Z、Ctrl+W等等。當用戶按下這些組合鍵時,終端會將它們作為一個控制字符發(fā)送到應(yīng)用程序中。應(yīng)用程序可以通過解析控制字符的方式來執(zhí)行一些特殊的操作,例如中斷程序的運行、暫停程序、刪除光標前面的一個單詞等等。
3. TTY的交互
掌握了上面的原理之后,我們就可以開始實現(xiàn)基本的命令行交互了。下面,我們將帶領(lǐng)讀者完成簡化版的命令行程序。
3.1 準備工作
我們需要準備一個文件文件,文件名為tty.c。然后我們在文件中添加以下信息:
“`
#include
#include
#include
#include
int mn() {
char c;
struct termios old_tio, new_tio;
tcgetattr(STDIN_FILENO,&old_tio);
new_tio=old_tio;
new_tio.c_lflag &=(~ICANON & ~ECHO);
tcsetattr(STDIN_FILENO,TCSANOW,&new_tio);
while (1) {
c=getchar();
if (c==’q’) {
break;
}
}
tcsetattr(STDIN_FILENO,TCSANOW,&old_tio);
exit(0);
}
“`
這是一個非常簡單的C程序,它允許我們從終端讀取一個字符,然后在屏幕上顯示出來。當我們按下’q’鍵時,這個程序就會退出。
這個程序的實現(xiàn)原理并不復(fù)雜,首先它會調(diào)用tcgetattr()函數(shù)來獲取終端的屬性,其中的三個參數(shù)分別是文件描述符、指向termios結(jié)構(gòu)體的指針(此處使用old_tio變量),以及一個錯誤處理參數(shù)。tcgetattr()函數(shù)將終端的屬性保存到old_tio中。
接下來,程序?qū)ld_tio的值復(fù)制到一個新的termios結(jié)構(gòu)體new_tio中。然后,使用掩碼來關(guān)閉canonical模式和回顯模式。canonical模式會讓輸入立即回顯,而不是等待用戶回車,而回顯模式會讓終端打印出我們輸入的字符。
在while循環(huán)中,我們將調(diào)用getchar()函數(shù)來讀取一個字符。當讀入的字符為’q’時,我們就退出循環(huán)。最后我們重新設(shè)置終端屬性,然后使用exit()函數(shù)退出程序。
3.2 編譯并運行程序
編輯完程序后,我們需要編譯并運行它。在終端中輸入以下命令:
“`
$ gcc -o tty tty.c
$ ./tty
“`
執(zhí)行這個程序之后,我們會看到一個光標在屏幕上處于等待狀態(tài)。當我們輸入任何字符時,該字符都會立即顯示在屏幕上。輸入’q’鍵之后,程序就會退出。
4. 結(jié)論
相關(guān)問題拓展閱讀:
- linux dev下的ttyo1是怎么生成的
linux dev下的ttyo1是怎么生成的
/dev/tty表示控制終端 如果當前進程有控制終端(Controlling Terminal)的話,那么/dev/tty就是當前進程的控制終端的設(shè)備特殊文件??伤鼭B以使用命令”團脊ps –ax”來查看進程與哪個控制終端相連。對于廳逗你登錄的shell,/dev/tty就是你使用的終端,設(shè)備號是(5,…
可以私聊我~
linux tty 原理的介紹就聊到這里吧,感謝你花時間閱讀本站內(nèi)容,更多關(guān)于linux tty 原理,Linux TTY簡介:掌握原理,實現(xiàn)命令行交互,linux dev下的ttyo1是怎么生成的的信息別忘了在本站進行查找喔。
香港服務(wù)器選創(chuàng)新互聯(lián),2H2G首月10元開通。
創(chuàng)新互聯(lián)(www.cdcxhl.com)互聯(lián)網(wǎng)服務(wù)提供商,擁有超過10年的服務(wù)器租用、服務(wù)器托管、云服務(wù)器、虛擬主機、網(wǎng)站系統(tǒng)開發(fā)經(jīng)驗。專業(yè)提供云主機、虛擬主機、域名注冊、VPS主機、云服務(wù)器、香港云服務(wù)器、免備案服務(wù)器等。
網(wǎng)站題目:LinuxTTY簡介:掌握原理,實現(xiàn)命令行交互(linuxtty原理)
網(wǎng)站網(wǎng)址:http://m.fisionsoft.com.cn/article/cdesgpp.html


咨詢
建站咨詢
