終端那些事
終端驅動屬於對特定設備編寫的程序。
1、軟件工具和對特定設備編寫的程序
所謂軟件工具,就是日常用到的ls、who、grep等不區分磁盤文件和設備文件的應用程序。
軟件工具用於對輸入數據處理,獲得輸出。
這一流程和三個詞密切相關——標準輸入、標準輸出和標準錯誤輸出
軟件工具對數據來源和目的地不做任何假設,只是處理輸入獲得輸出
而針對特定設備編寫的程序,會根據設備的特性處理一些獨有的概念,
這不同於軟件工具對數據去留不加註意的特性。
終端的規範處理
- 一般使用的終端顯示設備會回顯我們的輸入,支持對輸入的編輯。終端這樣工作模式,稱爲終端的規範模式。
回顯就是把輸入顯示在屏幕上,而要實現編輯輸入,就需要對輸入進行緩存。
終端的這些功能都能通過終端驅動進行設置。
命令stty和系統調用tcsetattr()提供了修改接口。
對應的,緩衝和回顯被關閉的模式,稱爲終端的非規範模式。
而在終端處於存在感更低的raw模式時,輸入數據不加處理被直接送給程序。
從這個角度看,終端驅動可以被理解成輸入數據的預處理器。
看似多餘的模式
- 上述幾個模式似乎沒有必要(何必要削減豐富的功能呢?)
事實上他們卻十分常用。
a、即時響應
- 有時我們不需要編輯輸入,而希望輸入立即得到程序響應。例如在遊戲控制時希望確定的按鍵獲得確定的響應,就可以關閉終端的緩存,直接將數據送至對應處理程序,終端的非規範模式就派上用場。
b、無回顯
- 不是所有的輸入都希望被人看到。例如可以關閉輸入密碼時的回顯,保護密碼安全
c、無阻塞
- 某些命令/函數阻塞進程等待輸入(比如getchar),但我們不希望沒有輸入計算姬就一直等待下去,就像打電話不是要一直等到對方接聽。這時無阻塞模式就很有意義了。
無阻塞模式是說,即使沒有獲得輸入,也退出,就像去餐廳吃飯,沒座位吃就退出來換個地方吃,不會一直等下去。
另外,無阻塞模式配合時間變量就能實現類似“等一會”的功能。