打开了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。
本文转自 驿落黄昏 51CTO博客,原文链接:http://blog.51cto.com/yiluohuanghun/1064152,如需转载请自行联系原作者