Linux ncurses 实现原理
ncurses 具体实现原理?
ncurses 的实现依赖于操作系统吗?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
ncurses 具体实现原理?
ncurses 的实现依赖于操作系统吗?
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(2)
如果你说的是那个GUI库的话,实现原理当然是直接打开console buffer然后写字符啊,或者通过一些奇怪的字符让shell来帮你做一样的事情,就跟GUI点像素是同一个道理。这种操作当然是依赖于操作系统的。Unix的很多escape sequence在Windows下面就用不了。
譬如说Windows,你要完全操纵一个console application上面的东西,你需要大量的函数:https://msdn.microsoft.com/en-us/library/windows/desktop/ms682073(v=vs.85).aspx 。只有用满了这些,你才能在Windows上面做一个这样的GUI库,支持鼠标键盘滚轮操作,还有随意修改任何坐标的字符并控制什么时候刷新,还不会被locale和code page搞。
当然做一个简单的并不会很难,只要把这些奇怪的边界条件都处理好了,控件都是小事,顺便还可以增长如何让GUI可以适应中文、韩文、阿拉伯文、英文、泰文、菲律宾文等奇怪文字的知识。
传统的Unix Console和DOS/Windows Console并不一样。从串口终端发展下来的这一系Terminal从接口上说是一个纯粹的“流”,因此它本身并没有定位屏幕位置的能力。(最初的Terminal是打字机,而不是视频终端)
因此大部分的终端使用Escape Sequence,也就是一些特殊的不可见字符序列来传递光标定位、文字擦除、显示颜色等特殊的指令。其中普及最广的标准应该是ANSI Escape Sequence。
具体到NCurses,NCurses应该使用了类似于Terminfo/Termcap的数据库来消化不同终端的不同。这些数据库保存了各种终端的指令支持状况,以及对应这些指令的Escape Sequence。
而在于具体实现,在Windows Console Host之类终端模型完全不同的环境里也许会比较特殊,但在支持Terminal的Unix类系统上应该是差别不大的。