1.1 什么是curses curses 实际上是一个函数开发包,专门用来进行UNIX 下终端环境下的屏幕界面处理以及I/O 处理。通过这些函数库,C 和 C++程序就可以控制终端的视频显示以及输入输出。使用curses 包中的函数,用户可以非常方便的创建和操作窗口,使用菜单以及表单,而且最为重要的一点是使用curses 包编写的程序将独立于各种具体的终端,这样的一个直接的好处就是程序具有良好的移植性。这一点在网络上显得尤其重要,因为你面对的可能是上百种终端,如果为每一个终端都专门重新编写一套新的程序,那么复杂程度出乎想象,而且几乎不可能。为了能够达到这样的目的,curses 包使用了终端描述数据库(Terminal Description Databases)terminfo(TERMinal INFOrmation database)或者termcap( TERMinal CAPabilitie database) ,这两个数据库里存放了不同终端的操作控制码和转义序列以及其余相关信息,这样当使用每一个终端的时候,curses 将首先在终端描述数据库中查找是否存在该类型的终端描述信息,如果找到则进行适当的处理。如果数据库中没有这种终端信息,则程序无法在该终端上运行,除非用户自己增加新的终端描述。具体的如何在终端描述数据库中增加自定义终端在第八章“terminfo 数据库”中有详细的介绍。 1.1.1 curses 发展历史 curses 是怎么来的?curses 的名称起源于“cursor optimization”,即光标优化的意思。它最早是由巴克利大学的Bill Joy 和 Ken Arnold 发展而来,主要是处理游戏rogue 的屏幕界面。rogue 是一个古老的基于文本的的冒险类游戏。在当时,仅仅控制游戏屏幕的外观显示就需要编写大量的代码,因为它们使用的是古老的termios 甚至是tty 接口。巨大的工作量迫使Bill Joy 和 Ken Arnold 将 rogue 游戏中的所有的屏幕处理和光标移动的函数汇集到一个函数库中。这就形成了最早的也是最简单的curses 处理库的雏形。它最终随着BSD UNIX 的早期版本发行开来。在这个版本中使用的是当时业已存在的termcap 数据库来描述终端信息。 后来贝尔实验室的Mark Horton 在 System III UNIX 中重新编写了curses。它相对以前的版本有了很大的扩展和提高,增加了一些非常新的特性。它首先将termcap 数据库改进为 terminfo数据库。terminfo 数据库完全由Horton 开发编写,它是从termcap 发展而来,而且更为中要重要的是其中引进了参数化性能的概念,这样使得描述多视频属性以及彩色...