一切皆文件! unix已经说了。埃里克雷蒙德这样说的,不服吗?
既然 /dev/fb0 被抽象成了显示器,可以在字符终端通过操作映射了 /dev/fb0 的内存在屏幕上画32bit真彩图,那么如何操作鼠标键盘呢?
/dev/input/mouse0 可以用来读取鼠标事件。当你在字符终端cat它并移动鼠标时,它貌似告诉你有事情发生了,但是你却无法解读:
为了找到解读它的正确方法,要么谷歌,要么百度,要么还有一个最直接的方法,那就是查linux内核源码中关于mouse0这个文件的read回调函数:
我们看看 mousedev_packet 是如何组装包的:
非常明白,我不管别的,我也没有动机去学,我现在就是想知道鼠标的x,y坐标:
p->dx,p->dy从名字上和从代码上都可以看出,这是 相对于上一次 的坐标的变化!所有信息都有了。
那么,现在,可以写代码了:
运行它,然后在字符终端移动鼠标,效果如下:
嗯,矩形随着鼠标而移动,并且不会破坏任何所到之处的字符。
现在,我来回顾一下这个周末做的这些事情,意味着什么。
我可以在字符终端上画32位真彩图; 我可以检测到鼠标键盘的事件并且反应。这意味着,如果有时间和精力,我可以实现一个gui系统了。
当然,gui系统和网络协议栈那是隔行如隔山,肯定会遇到超级多的麻烦,不是仅仅读写两个文件:
/dev/fb0 /dev/input/mouse0就可以搞定的。
事实上,真正的gui系统从来不用这种方式。它们貌似在反抗着 unix一切皆文件 的理念,并且证明这样会更好!哦,对了,windows gui的成功就是一个证明,还有后来最新版本的macos…
说什么字符终端,字符也是 画出来的 。没什么大不了的。只不过,想要用像素去设置字符,那就要了解一下 字符点阵 的information了…这又是另一个领域的话题。
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对服务器之家的支持。
原文链接:https://blog.csdn.net/dog250/article/details/90143417