日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
LinuxTTY簡(jiǎn)介:掌握原理,實(shí)現(xiàn)命令行交互(linuxtty原理)

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

成都創(chuàng)新互聯(lián)公司是專業(yè)的安源網(wǎng)站建設(shè)公司,安源接單;提供網(wǎng)站制作、成都網(wǎng)站設(shè)計(jì),網(wǎng)頁設(shè)計(jì),網(wǎng)站設(shè)計(jì),建網(wǎng)站,PHP網(wǎng)站建設(shè)等專業(yè)做網(wǎng)站服務(wù);采用PHP框架,可快速的進(jìn)行安源網(wǎng)站開發(fā)網(wǎng)頁制作和功能擴(kuò)展;專業(yè)做搜索引擎喜愛的網(wǎng)站,專業(yè)的做網(wǎng)站團(tuán)隊(duì),希望更多企業(yè)前來合作!

1. TTY的類型

在Linux中,實(shí)際存在著多種不同類型的TTY,它們之間存在這些區(qū)別和聯(lián)系。以下是一些常見的TTY類型:

1.1 硬件TTY

硬件TTY通常指的是物理終端設(shè)備,如串口終端、打印終端、普通串口等。Linux系統(tǒng)需要將物理終端映射為一個(gè)虛擬TTY,這樣用戶才能使用這些終端。

1.2 虛擬TTY

虛擬TTY通常指的是由操作系統(tǒng)模擬出來的終端設(shè)備,用戶可以連接來自主機(jī)或者網(wǎng)絡(luò)上的另一個(gè)終端。在Linux中,使用Ctrl+Alt+F1~F6就可以在不同的TTY之間切換。

1.3 偽終端(pty)

偽終端是另一種比較特殊的TTY類型,它由Linux內(nèi)核為了支持遠(yuǎn)程登錄而提供的一個(gè)抽象設(shè)備。偽終端允許用戶和遠(yuǎn)程主機(jī)之間進(jìn)行交互,讓用戶和服務(wù)器之間的通信成為可能。在Linux中,我們可以使用ssh或telnet等協(xié)議連接到遠(yuǎn)程主機(jī)。在這個(gè)連接過程中,偽終端技術(shù)被廣泛使用。

2. TTY的原理

在Linux系統(tǒng)中,終端設(shè)備實(shí)際上是由硬件和軟件兩個(gè)部分組成的。硬件部分主要指的是物理終端設(shè)備,軟件部分主要指的是Linux內(nèi)核中的TTY驅(qū)動(dòng)程序。

2.1 Linux內(nèi)核中的TTY驅(qū)動(dòng)程序

在Linux內(nèi)核中,實(shí)現(xiàn)TTY的關(guān)鍵部分就是相關(guān)的驅(qū)動(dòng)程序。這些驅(qū)動(dòng)程序負(fù)責(zé)管理從硬件終端設(shè)備到虛擬終端之間的所有交互。對(duì)于一些常見的終端設(shè)備,如串口和鍵盤,Linux內(nèi)核已經(jīng)提供了相應(yīng)的驅(qū)動(dòng)程序。

2.2 終端設(shè)備的讀寫

在Linux中,應(yīng)用程序和終端設(shè)備之間的通信都是通過流的形式傳遞的。例如,當(dāng)我們?cè)诮K端輸入一個(gè)字符時(shí),它會(huì)被以流的形式發(fā)送到應(yīng)用程序中。相反,當(dāng)應(yīng)用程序向終端設(shè)備輸出數(shù)據(jù)時(shí),它也是以流的形式進(jìn)行的。

在Linux系統(tǒng)中,流式通信是由內(nèi)核來保證的。在掌握如何使用終端設(shè)備之前,有必要了解一下流的概念。流分為字符流和塊流兩種。字符流是像鍵盤或串口一樣處理一個(gè)字符一個(gè)字符的流,而塊流是像硬盤或網(wǎng)絡(luò)連接一樣處理一個(gè)數(shù)據(jù)塊一個(gè)數(shù)據(jù)塊的流。由于TTY主要處理的是字符流,因此我們這里只介紹字符流的實(shí)現(xiàn)。

對(duì)于TTY設(shè)備的讀寫操作,內(nèi)核使用了兩個(gè)重要的數(shù)據(jù)結(jié)構(gòu),一個(gè)是tty_struct結(jié)構(gòu)體,另一個(gè)是file_operations結(jié)構(gòu)體。tty_struct結(jié)構(gòu)體用于存儲(chǔ)TTY設(shè)備的相關(guān)信息,例如終端類型、設(shè)備地址等;而file_operations結(jié)構(gòu)體中則保存了關(guān)于TTY設(shè)備讀取和寫入的函數(shù)指針。

2.3 終端設(shè)備的控制

除了讀寫數(shù)據(jù)外,終端設(shè)備還需要能夠控制一些特殊的功能,如換行、清屏等。為了實(shí)現(xiàn)這些功能,Linux內(nèi)核使用了控制字符??刂谱址且恍┺D(zhuǎn)義序列,它們是用一些特殊的字符組合而成的。例如,Ctrl+C組合鍵就會(huì)產(chǎn)生一個(gè)控制字符,它用于中斷正在運(yùn)行的程序。

在終端設(shè)備中,一些比較常見的控制字符有Ctrl+C、Ctrl+Z、Ctrl+W等等。當(dāng)用戶按下這些組合鍵時(shí),終端會(huì)將它們作為一個(gè)控制字符發(fā)送到應(yīng)用程序中。應(yīng)用程序可以通過解析控制字符的方式來執(zhí)行一些特殊的操作,例如中斷程序的運(yùn)行、暫停程序、刪除光標(biāo)前面的一個(gè)單詞等等。

3. TTY的交互

掌握了上面的原理之后,我們就可以開始實(shí)現(xiàn)基本的命令行交互了。下面,我們將帶領(lǐng)讀者完成簡(jiǎn)化版的命令行程序。

3.1 準(zhǔn)備工作

我們需要準(zhǔn)備一個(gè)文件文件,文件名為tty.c。然后我們?cè)谖募刑砑右韵滦畔ⅲ?/p>

“`

#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);

}

“`

這是一個(gè)非常簡(jiǎn)單的C程序,它允許我們從終端讀取一個(gè)字符,然后在屏幕上顯示出來。當(dāng)我們按下’q’鍵時(shí),這個(gè)程序就會(huì)退出。

這個(gè)程序的實(shí)現(xiàn)原理并不復(fù)雜,首先它會(huì)調(diào)用tcgetattr()函數(shù)來獲取終端的屬性,其中的三個(gè)參數(shù)分別是文件描述符、指向termios結(jié)構(gòu)體的指針(此處使用old_tio變量),以及一個(gè)錯(cuò)誤處理參數(shù)。tcgetattr()函數(shù)將終端的屬性保存到old_tio中。

接下來,程序?qū)ld_tio的值復(fù)制到一個(gè)新的termios結(jié)構(gòu)體new_tio中。然后,使用掩碼來關(guān)閉canonical模式和回顯模式。canonical模式會(huì)讓輸入立即回顯,而不是等待用戶回車,而回顯模式會(huì)讓終端打印出我們輸入的字符。

在while循環(huán)中,我們將調(diào)用getchar()函數(shù)來讀取一個(gè)字符。當(dāng)讀入的字符為’q’時(shí),我們就退出循環(huán)。最后我們重新設(shè)置終端屬性,然后使用exit()函數(shù)退出程序。

3.2 編譯并運(yùn)行程序

編輯完程序后,我們需要編譯并運(yùn)行它。在終端中輸入以下命令:

“`

$ gcc -o tty tty.c

$ ./tty

“`

執(zhí)行這個(gè)程序之后,我們會(huì)看到一個(gè)光標(biāo)在屏幕上處于等待狀態(tài)。當(dāng)我們輸入任何字符時(shí),該字符都會(huì)立即顯示在屏幕上。輸入’q’鍵之后,程序就會(huì)退出。

4. 結(jié)論

相關(guān)問題拓展閱讀:

  • linux dev下的ttyo1是怎么生成的

linux dev下的ttyo1是怎么生成的

/dev/tty表示控制終端 如果當(dāng)前進(jìn)程有控制終端(Controlling Terminal)的話,那么/dev/tty就是當(dāng)前進(jìn)程的控制終端的設(shè)備特殊文件。可塌伏滲以使用命令”團(tuán)脊ps –ax”來查看進(jìn)程與哪個(gè)控制終端相連。對(duì)于廳逗你登錄的shell,/dev/tty就是你使用的終端,設(shè)備號(hào)是(5,…

可以私聊我~

linux tty 原理的介紹就聊到這里吧,感謝你花時(shí)間閱讀本站內(nèi)容,更多關(guān)于linux tty 原理,Linux TTY簡(jiǎn)介:掌握原理,實(shí)現(xiàn)命令行交互,linux dev下的ttyo1是怎么生成的的信息別忘了在本站進(jìn)行查找喔。

香港服務(wù)器選創(chuàng)新互聯(lián),2H2G首月10元開通。
創(chuàng)新互聯(lián)(www.cdcxhl.com)互聯(lián)網(wǎng)服務(wù)提供商,擁有超過10年的服務(wù)器租用、服務(wù)器托管、云服務(wù)器、虛擬主機(jī)、網(wǎng)站系統(tǒng)開發(fā)經(jīng)驗(yàn)。專業(yè)提供云主機(jī)、虛擬主機(jī)、域名注冊(cè)、VPS主機(jī)、云服務(wù)器、香港云服務(wù)器、免備案服務(wù)器等。


新聞名稱:LinuxTTY簡(jiǎn)介:掌握原理,實(shí)現(xiàn)命令行交互(linuxtty原理)
文章源于:http://www.5511xx.com/article/cdesgpp.html