Termios檢視原始碼討論檢視歷史
Termios |
termios的實現中,有大量的參數設置,還有偽終端的說法。原因就在於當初UNIX發明時,(上世紀七十~八十年代),在美國,西歐大學裡面用的都是大型機加客戶終端,學生們用的是串口方式與大型機進行交流,通訊。所以,當時很多軟件的設計都是針對這種情況而開發的。包括termios,tty,X window等等。因為要在串口上傳輸,所以不得不定義很多按鍵的組合符號和很多傳輸模式。
簡介
Linux中的控制台界面,要大量用到Termios庫的內容。但是,總的來看,這些東西已經過時了,應該用更簡單的方案來代替它了,儘管它是POSIX標準的一部分。以我們日常的使用情況來看,串口已經漸漸退出了歷史舞台。幾乎只在嵌入式開發群中使用(因為串口最容易出來,所以開發的第一步就是要把串口調通,這樣才能得到信息,才能方便進一步開發)。就我們的情況來看,我們的終端基本上只與顯示系統掛鈎(也可從串口輸出,但一般只做調試用),真正更高級的互聯傳輸功能都是通過網卡通過多種協議完成的(tcp/ip是最基本的)。所以,我們在新設計的控制台實現中,可以完全簡化設計的方案,按照最基本的來設計就行了。但是,為了做到設計出來的代碼的層次性和可移植性,Linux/Unix下終端的理論是要認真學習一下的(比如原始模式,標準模式等等),看別人是怎樣做到功能的抽象和分離的。
評價
Unix V7 以及很多後來的系統有一個波特率的列表,在十四個值 B0, ..., B9600 之後可以看到兩個常數 EXTA, EXTB ("External A" and "External B")。很多系統將這個列表擴展為更高的波特率。tcsendbreak 中非零的 duration 有不同的效果。SunOS 指定中斷 duration*N 秒,其中 N 至少為 0.25,不高於 0.5 。Linux, AIX, DU, Tru64 發送 duration 微秒的 break 。FreeBSD, NetBSD, HP-UX 以及 MacOS 忽略 duration 的值。在 Solaris 和 Unixware 中, tcsendbreak 搭配非零的 duration 效果類似於 tcdrain。[1]