打開了framebuffer,你可以在其上畫圖,寫字。屏幕上就及時能顯示你往framebuffer裡填充的內容。但是在多進程操作framebuffer的環境下,比如在一個擁有窗口管理環境下,操作framebuffer顯示了全屏的一幅圖片,此時窗口管理器有個進程在不斷的更新系統當前時間,這樣就存在當前圖片顯示不完整的情況。
此時實際上只需要當前進程顯示完整的一幅圖片,改圖片的顯示區域不希望被其他操作framebuffer的進程所干擾。 如何避免這種情況的發生?方法就是操作tty設備。原理很簡單,就是打開一個新的終端tty設備,並把該設備激活,設為圖形模式,讓改終端獨占 framebuffer設備,然後再輸出圖形,這樣,即使有其他進程在操作framebuffer,當前終端的framebuffer就不會被重刷,從而實現了穩定的輸出。
一般來說linux系統中會存在7個tty設備,tty0則是當前所使用虛擬終端的一個別名,系統所產生的信息會發送到該終端上.tty1--tty6都稱為虛擬終端設備,那麼打開哪一個新的tty設備呢?先用ioctl(ConsoleFD, VT_OPENQRY, &vtnumber)查詢一下當前打開的虛擬終端數量,一般的發行版都是打開6個,即tty1~tty6,這個可以在/etc/inittab裡面控制。另外,tty0是系統自動打開的,但不用於用戶登錄,所以查詢的結果是一共打開7個,vtnumber=7,這個數字也就是下一次可用的終端號,即 tty7。