唐洁
摘要 本文主要分析Unix下的curses库之I/O开发接口的运用方法。
关键词 Unix终端,可视化开发,curses库,I/O开发,字符界面,终端
目前金融、邮政、电信等行业大多采用基于Unix/Linux系统的主机服务器,大部分应用软件基于Unix下的字符终端环境。在终端环境下编写应用程序,屏幕处理程序是重点也是难点,它直接处理与用户的交互,比如接受用户数据,输出窗口、菜单等。对于Unix/Linux系统下的可视化开发可以使用系统自带的curses包,curses包是为屏幕控制和操作提供的一个简单的高层接口。对用户来说,它屏蔽了终端的多样性和复杂性,使得用户不必再考虑各个终端的具体的底层细节,使用curses包可以较轻松的完成字符界面下的可视化开发工作。
一、 Curses库基本介绍
最早的curses包是随SystemV Release 4.0(SVR4) Unix一起发布的,目前已经比较成熟,并且为大多数开发人员使用。使用curses包处理的时候,用户处理的实际上是一个逻辑终端,基本层次结构如下图所示:
图 curses包工作的基本层次结构
终端用户通过curses库函数执行各种终端操作。在真正操作终端之前,curses必须了解终端的性能,并用这些性能初始化相关环境变量,比如有些终端最大行宽为80,而有些终端却不是80。事实上大部分终端的详细的描述信息都保存在terminfo或者termcap文件中,通过读取这些描述信息,就可以了解不同终端的具体性能。通过terminfo或者termcap,用户不必再关心终端的细节,从而可以集中精力处理上层操作。读取terminfo和termcap的操作都被封装在curses包中,因此使用curses编写的程序能够运行在大部分的终端上面。通过curses程序,可以非常方便的处理终端视频的输入和输出、在屏幕上可以移动光标、打印显示、将终端屏幕切分成窗口或者更改一些颜色属性,而且目前一些curses库提供了新的组件使得可以非常方面的创建窗口、面板、菜单以及各种输入表单,这些组件将极大的美化界面。下面将详细分析curses包的I/O开发方法。
1.引入curses
在Unix系统中开发字符可视化界面,首先在程序中必须引用curses库的头文件,语句如下:
#include<curses.h>
由于curses使用标准I/O接口,因此这个库一旦被引用,系统自动的将<stdio.h>和<unclt.h>一起包含进来,如果是System V系统,<terminfo.h>也会包含进来,另外还可能包括<termios.h>、<termio.h>、<sgtty.h>,这具体的由系统本身决定。程序编写结束后使用下面的命令进行编译和链接,生成可执行文件:
cc [flags] file –lcurses
-lcurses 参数用来在链接的时候提示链接程序将 curses 库链接进去。
2.常量定义
头文件curses.h中定义了四个整型常量,两个常量是大多数的curses函数的返回结果,另外两个是布尔类型的值,一旦包含了curses头文件,就可以在程序中直接使用它们,这四个常量是是:
OK curses 函数运行成功的返回值,系统定义为 0
ERR curses 函数运行发生错误时候的返回值,系统定义为-1
TRUE 布尔值,表示为真,系统定义为 1
FALSE 布尔值,表示为假,系统定义为 0
|