最進讀了一個人使用 go 語言寫的Shell,架構很簡單:
1. 一個前端程序 proc1 完全接管控制台。
2. proc1 進行讀取,異步讀取。将讀取後的結果傳遞給 Parser.
3. Parser解析傳遞進去的指令。并且fork另外一個程序 ,exec這個指令
4. proc1 對接管的控制台進行管理,進行重繪。
如何對控制台進行重繪?
- 标準輸出裝置可以抽象成一個檔案。
- 可以對這個檔案進行對寫。
- 可以,針對讀寫的内容,可以對其進行控制:比如控制是否回顯,控制光标的位置,清屏,設定字型的背景色和前景色等。
- 這些控制指令,可以通過 printf 函數 和 ioctl() 系統調用完成。
當我們使用一個前端程序接管了控制台之後,就可以完全控制整個控制台了,控制顯示什麼字元,什麼時候顯示在什麼位置等一系列操作,當然也可以實作動畫了(Flappy bird) 就是這麼畫出來的。