第6章 使用curses函数库管理基于文本的屏幕

在第5章中,你学习了如何加强对字符输入的控制,以及如何以终端无关的方式提供字符输出。使用通用终端接口(GTI或termios)和通过tparm及其相关函数控制escape转义序列都存在一个问题,那就是它们需要使用大量的底层代码。对大多数程序来说,它们更需要的是一个高层接口。我们希望能够简单绘制屏幕,并能用一组函数自动处理与终端相关的问题。

在本章中,你就将学习函数库curses。curses标准作为一个重要的过渡,位于简单的文本行程序和完全图形化界面(一般也更难于编程)的X视窗系统程序(如GTK+/GNOME和Qt/KDE)之间。Linux还提供svgalib函数库(一个底层图形函数库),但它并不是UNIX的标准函数库,因此,在其他类UNIX操作系统中一般并未提供该函数库。许多全屏幕的应用程序都使用curses函数库,它易于使用,并且提供了终端无关的方式来编写全屏幕的基于字符的程序。在编写这类程序时,使用curses函数库总是比直接使用escape转义序列要容易得多。curses还可以管理键盘,它还提供了一种简单易用的非阻塞字符输入模式。

读者可能会发现,在Linux控制台上运行本章中的一些例子时,并不总是能够获得预期的效果。这是因为,当curses函数库和控制台终端定义的结合出现偏差时,使用curses函数库的程序的输出结果就会有些问题,但如果在X视窗系统的xterm窗口中运行这些例子,其输出结果就与你预期的完全一样了。

本章将介绍以下几方面的内容:

❑ curses函数库的使用

❑ curses函数库的概念

❑ 基本的输入输出控制

❑ 多窗口的使用

❑ keypad模式的使用

❑ 彩色显示

在本章最后,我们将用C语言重新实现CD唱片管理程序,将其作为对目前为止所学知识的一个总结。