首页 | 资讯动态 | linux基础 | 系统管理 | 网络管理 | 编程开发 | linux数据库 | 服务器技术 | linux相关 | linux认证 | 嵌入式 | 下载中心 | 专题 | linux招聘 | 镜像站
OKLinux中文技术站
·设为首页
·加入收藏
·联系我们
系统管理: 中文环境 系统管理 桌面应用 内核技术 | Linux基础: 基础入门 安装配置 常用命令 经验技巧 软件应用 | Linux数据库: Mysql Postgre Oracle DB2 Sybase other
网络管理: 网络安全 网络应用 Linux服务器 环境配置 黑客安全 | 编程开发: PHP CC++ Python Perl Shell 嵌入式开发 java jsp | PHP技术: PHP基础 PHP技巧 PHP应用 PHP文摘
Linux资讯 Linux招聘 Linux专题 Apache | Linux相关: 硬件相关 Linux解决方案 Linux认证 企业应用 其它Unix | 相关下载: 资料下载 参考手册 开发工具 服务器类 软路由 其它
 技术搜索:
会员中心 注册会员 高级搜索  
  → 当前位置:首页>linux基础>经验技巧>正文

Linux终端图形库 Curses简介和实例分析

http://www.oklinux.cn  2008-03-18  来源: 赛迪网 lktlks  会员收藏  游客收藏  【 】 

随着电脑知识的普及, 越来越多的电脑爱好者开始了解和使用Linux.。Linux的轻松自由之风给了我们不同的感受。但是我们不能满足于基本的命令和KDE, Gnome等用户界面的操作. 我们要干什么? 编程, 对, 编程! 对于编程爱好者, Linux有着很好的编程环境: gcc(GNU Compiler Collection)能够编译C, C , Java等很多种语言, 而且Linux环境下有很多函数库可以调用.了解一些这些函数库的使用, 会给你的编程工具箱里增加许多有用的工具. 今天, 就让我们来认识一下curses --- 它不是什么中世纪巫婆的咒语,而是一个在Linux/Unix下广泛应用的图形函数库.

以前学过TC2.0的朋友肯定还记得TC里边有一个图形库BGI(Borland Graphics Interface, 还记得那个头文件吗:). 用它我们可以绘制在DOS下的用户界面和漂亮的图形. 而Linux/Unix编程给人的感觉就比较"cool"一点, 好像Linux编程都是在黑黑的终端下进行的.确实是这样,许多Linux高手都喜欢在终端方式下工作, 熟悉了一些命令以后,这样的工作方式效率还是很高的. 但是长久地看着黑黑的屏幕难免让人感到厌倦, 特别是像我这样接触Linux不久的菜鸟:) 有没有一种工具能让我们在Linux下编出好看的图形呢? 答案是肯定的, 它就是curses!

curses的名字起源于"cursor optimization",即光标优化. 它最早由有美国伯克利大学的Bill Joy和Ken Arnold编写的, 用来处理一个游戏rogue的屏幕显示. 后来贝尔实验室的Mark Horton在System III Unix中重新编写了curses. 现在几乎所有的Unix, Linux操作系统都带了curses函数库, curses也加入了对鼠标的支持, 一些菜单和面板的处理. 可以说, curses是Linux终端图形编程的不二选择(比如著名的文字编辑器 vi 就是基于curses编的)

OK, 闲话少说,现在我们开始进入正题:

首先我们应该了解, 在终端使用使用的屏幕模式是基于文本的. 所以在开始使用curses前, 需要用initscr()函数初始化屏幕. 对应的, 程序结束需要调用endwin();函数来关闭curses状态.

有了这个概念, 我们就可以来写著名的"Hello, world!"之curses版了:

/*-----------------------------------------------------------------
A very simple example of curses programming
coder: jellen
date: 3-26-2004
----------------------------------------------------------------*/

#include 

int main()
{
initscr();

box(stdscr, ACS_VLINE, ACS_HLINE); /*draw a box*/
move(LINES/2, COLS/2); /*move the cursor to the center*/
waddstr(stdscr, "Hello, world!"); 
refresh();
getch();

endwin();
return 0;
}

呵呵, 刚才忘了说了. 我们调用curses库一般是用C语言的(没什么奇怪, C可以说是Linux的官方语言, 不过你也可以用C 或Python等语言调用curses的, 这无关紧要). 假设我们把这个程序保存为 hello.c

不过不要急着用gcc -o hello hello.c去编译运行(我知道你会用gcc:) 那样是不能通过编译的. 因为curses库不在标准路径上, 所以我们要加上 -lcurses连接选项, 像这样:

gcc -o hello hello.c -lcurses

现在你用 ./hello 运行一下程序看看,是不是出现了你所期望的窗口.

现在我们来一行行分析一下代码.

#include /*这是每个 curses 程序都必须包含的头文件,表明使用了curses库*/

然后主函数中第一句initscr();初始化了屏幕, 使之开始进入curses图形化工作方式.

其实我们现在没有自己建立窗口, 用的是标准屏幕 stdscr(就象C里面标准输入stdin, 标准输出stdout一个概念), 它就是我们面前的电脑屏幕(不过现在还是黑黑的)

下面一句: box(stdscr, ACS_VLINE, ACS_HLINE); 画了一个框. 有了这个框我们才有"窗体"的感觉. stdscr就是标准屏幕, ACS_VLINE和ACS_HLINE代表构成方框两边的基本元素, 你也可以用 ''''|''''和''''-''''代替, 不过可能没有ACS_VLINE, ACS_HLINE好看了.

move(LINES/2, COLS/2); 
waddstr(stdscr, "Hello, world!");

这两句是把光标移到屏幕中间, 然后输出我们的"Hello, world!"

LINES 和 COLS是curses定义的宏, 代表当前屏幕的最大行数和列数. waddstr()函数的作用是在stdscr上打印字符串"hello, world!"

共2页: 上一页 1 [2] 下一页

上一篇:如何使用pipeline function获得实时输出   下一篇:修改Linux系统的文件属性


收藏于收藏夹】 【评论】 【推荐】 【打印】 【关闭
相关文档
·修改Linux系统的文件属性
·Linux系统清除Grub的几种方法
·在Linux系统下玩Windows游戏
·小技巧:开启 GNOME 的窗口分组功能
·终于彻底解决了Ubuntu中上网的问题
·Ubuntu shell脚本开机总动运行的方法
·技巧分享 不让Linux系统纪录与历史命令
·Linux下星际译王取词小问题的解决
·Linux系统Xwindow的初始中鼠标箭头和分辨率的问题
·一个初学者的Linux学习之旅之Linux安装篇
·学习Linux有没有前途
·Linux下可用的Java音乐播放器:YOYOPlayer
·Skype 2.0 面向 Linux 版已经发布了
·新手学堂 Linux系统中Fdisk命令使用方法
·使用Linux的真正理由
·Thinkpad T43笔记本通过蓝牙在Ubuntu上同步Palm Treo6
发表评论
密码: 匿名评论
评论内容:

(不超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规)
 
  最新文档
·Linux系统设置编译器路径的几种方法介
·新手学堂 Ubuntu7.10中添加XP字体
·Thinkpad T43笔记本通过蓝牙在Ubuntu上
·新手学堂 Linux系统中Fdisk命令使用方
·Skype 2.0 面向 Linux 版已经发布了
·Linux下可用的Java音乐播放器:YOYOPla
·学习Linux有没有前途
·一个初学者的Linux学习之旅之Linux安装
·Linux系统Xwindow的初始中鼠标箭头和分
·Linux下星际译王取词小问题的解决
·技巧分享 不让Linux系统纪录与历史命令
·Ubuntu shell脚本开机总动运行的方法
  阅读排行
·Linux爱好者入门教程
·Linux操作系统下的串口通信学习笔记
·从硬盘安装RHEL 5(Red Hat Enterprise
·Vim实用技术第一部分:实用技巧
·Vmware Workstation 5.0.0使用说明
·VM中Linux虚拟机下安装VMware Tools
·新手看招:调试工具GDB基本知识全接触
·如何在Linux/FreeBSD下玩模拟器游戏
·Gentoo版Linux操作系统的前世今生
·Linux进程间通信:管道及有名管道
·探索Linux 操作系统内存模型和管理
·Linux系统中用ALSA驱动声卡流程详解
·并不绝对安全:Linux下安全十二法则
·Linux 技巧: Bash 参数和参数扩展
·Linux操作系统网络驱动程序编写详解
网摘收藏: