在UNIX下如何用C语言保存和恢复屏幕
来源:asp之家 发布时间:2010-05-20 18:24:00
■ 如何在您的程式使用 curses ?
在您的 C 程式的档头将 <curses.h> include 进来.当您引进 curses.h
这个函式库後, 系统会自动将 <stdio.h> 和 <unctl.h>一并 include 进
来.另外, 在 System V 版本中, <terminfo.h> 这个函式库也将一并
include进来.
#include <curses.h>
main()
{
: :
: :
}
当然, 您的系统内必须放有 curses.h 这个函式库.
■ 如何编译(compile)
当您编辑好您的程式, 在 UNIX 提示符号下键入:
% /usr/5bin/cc [file.c] -lcurses
^^^^^^^
引进 curses.h 这个 library
或 % /usr/5bin/cc [file.c] -lcurses -ltermlib
(*注二)
■ 如何开始我的第一个 curses 程式?
在开始使用 curses 的一切命令之前, 您必须先利用 initscr()这个函式
来开启 curses 模式.
相对的, 在结束 curses 模式前 ( 通常在您结束程式前 ) 也必须以
endwin()来关闭 curses 模式.
#include <curses.h>
main()
{
initscr();
: :
: :
: :
endwin();
}
这是一般 curses 程式标准的模式.
此外, 您可以就您程式所须, 而做不同的设定. 当然, 您可以不做设定,而
只是呼叫 initscr().
您可以自己写一个函式来存放所有您所须要的设定. 平常使用时, 只要呼
叫这个函式即可启动 curses 并完成一切设定.
下面的例子, 即是笔者将平常较常用的一些设定放在一个叫 initial()的函
式内.
void initial()
{
initscr();
cbreak();
nonl();
noecho();
intrflush(stdscr,FALSE);
keypad(stdscr,TRUE);
refresh();
}
各函式分别介绍如下:
□ initscr()
initscr() 是一般 curses 程式必须先呼叫的函数, 一但这个函数
被呼叫之後, 系统将根据终端机的形态并启动 curses 模式.
□ endwin()
curses 通常以呼叫 endwin() 来结束程式. endwin() 可用来关闭
curses 模式, 或是暂时的跳离 curses 模式.如果您在程式中须要
call shell ( 如呼叫 system() 函式 ) 或是需要做 system call,
就必须先以 endwin() 暂时跳离 curses 模式. 最後再以
wrefresh() doupdate() 来重返 curses 模式.
□ cbreak()
nocbreak()
当 cbreak 模式被开启後, 除了 DELETE 或 CTRL 等仍被视为特殊
控制字元外一切输入的字元将立刻被一一读取.当处於 nocbreak 模
式时, 从键盘输入的字元将被储存在 buffer 里直到输入 RETURN
或 NEWLINE.在较旧版的 curses 须呼叫 crmode(),nocrmode() 来
取代 cbreak(),nocbreak()
□ nl()
nonl()
用来决定当输入资料时, 按下 RETURN 键是否被对应为 NEWLINE 字
元 ( 如 \n ).
而输出资料时, NEWLINE 字元是否被对应为 RETURN 和 LINDFEED
系统预设是开启的.
□ echo()
noecho()
此函式用来控制从键盘输入字元时是否将字元显示在终端机上.系统
预设是开启的.
□ intrflush(win,bf)
呼叫 intrflush 时须传入两个值:
win 为一 WINDOW 型态指标, 通常传入标准输出入萤幕 stdscr
bf 为 TRUE 或 FALSE
当 bf 为 true 时, 当输入中断字元 ( 如 break) 时, 中断的反应
将较为快速.但可能会造成萤幕的错乱.
□ keypad(win,bf)
呼叫 keypad 时须传入两个值:
win 为一 WINDOW 型态指标, 通常传入标准输出入萤幕 stdscr
bf 为 TRUE 或 FALSE
当开启 keypad 後, 可以使用键盘上的一些特殊字元, 如上下左右
等方向键, curses 会将这些特殊字元转换成 curses.h 内定义的一
些特殊键. 这些定义的特殊键通常以 KEY_ 开头.
□ refresh()
refresh() 为 curses 最常呼叫的一个函式.
curses 为了使萤幕输出入达最佳化, 当您呼叫萤幕输出函式企图改
变萤幕上的画面时, curses 并不会立刻对萤幕做改变, 而是等到
refresh() 呼叫後, 才将刚才所做的变动一次完成. 其馀的资料将
维持不变. 以尽可能送最少的字元至萤幕上. 减少萤幕重绘的时间.
如果是 initscr() 後第一次呼叫 refresh(), curses 将做清除萤
幕的工作.
猜你喜欢
- 腾讯QQ密保卡是腾讯推出的一项帐号安全保护服务。它是一个记录着10行8列数字的卡片,在执行敏感操作(如在幻想游戏中转让装备、修改QQ密码)时
- 康盛创想(Comsenz)推出的Manyou开放平台(官方体验地址:http://uchome.developer.manyou.com)与
- 北京时间7月2日消息,据国外媒体报道,博客服务提供商Wordpress(Wordpress.com)日前推出了拨打电话发布语音博客的新功能“
- 大约一周前,Google正式宣布,已经开始在搜索结果排序中考虑网站的网速。这个很久之前就在站长圈传开的消息,终于得到了证实。为了测试网页加载
- 这篇文章是我在国外知名英文文章站EzineArticles上发表的,主要是根据我这3年来对美国空间的使用和代购经验总结的,虽然有些地方还是带
- 系统服务篇三47. 服务名称: SysmonLog显示名称: Performance Logs and Alerts服务描述: 收
- 2007 年 10 月期间我们在全国6个城市举办了 AdSense 产品介绍会,期间有很多的发布商朋友提出了很多很好的意见和建议。这里我们就
- 11月6日消息,据中国法院网报道,由于盗播热映电影,爆米花视频网的主办公司普信通(北京)科技有限公经法院主持调解同意赔偿还款,但还款事宜此后
- 很多人做网站,有人成功,但是更多人失败,这是为什么?我觉得做网站,从事网赚行业—贵在坚持!现在搭建网站很容易,网络上一大把CMS建站系统任你
- 今天的互联网已经不同于以往,其中最主要的特点表现是网站众多。当然,这里还包括许多独立的博客。个人博客可以是生活里的琐事,也正是因为这种琐事,
- 老谢我也算得上是网站推广的老前辈了,一些网站推广经验和大家分享下。1.论坛推广这里所说的论坛推广绝对不是在论坛里一个一个版贴广告,也不是将网
- 内容摘要:相信很多站长朋友都使用过或正在使用Google AdSense广告,作为站长的一个重要收入来源,了解Google&nbs
- 在织梦系统中有内容模型这个概念,不同内容模型可以用来构建不同内容形式的站点,在系统中自带了以下几种模型:普通文章、图集、软件、商品、分类信息
- 代码如下【<a href="javascript:" onclick='window.
- 我的Godaddy主机的主域名已经过期一年多了,因为这个并不影响空间的正常使用,也就没有续费。昨晚想看看最近网站蜘蛛爬行情况,却发现Goda
- DoS (Denial of Service)攻击其中文含义是拒绝服务攻击,这种攻击行动使网站服务器充斥大量要求回复的 信息,消耗网络带宽或
- 选择服务器是一项重大决策,通常费时费钱。错误的决策会导致不良后果。在本文中,我们将首先谈谈一些在规划时需考虑的问题,然后进一步讨论如何在Wi
- 借上周推一把论坛举办《高手坐堂第一期宋建明:软文与网站优化的那点事》的机会,彭宇诚针对如何利用软文推广产品的问题与本期的嘉宾宋建明进行了一些
- DNS MX记录一定要放在A记录之前,否则和邮件后缀相匹配的域名没有指向邮件服务器,很有可能邮件服务器收不到邮件。DNS MX记录一定要放在