在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 将做清除萤
幕的工作.


标签:unix,c语言,屏幕
0
投稿

猜你喜欢

  • 关于Apache默认编码错误 导致网站乱码的解决方案

    2023-07-29 21:19:24
  • 百度更改网页权重算法 网站如何被顺利收录

    2008-12-04 08:55:00
  • DedeCMS如何SEO的探索(1)

    2007-10-29 17:23:00
  • 网站推“帖子换房子” 网友纷纷质疑网站炒作

    2009-10-12 09:31:00
  • 谷歌副总裁:Andorid半年内将推出震撼性内容

    2010-05-27 13:05:00
  • centos 6.7 下安装 redis-3.2.5的步骤

    2023-08-09 16:21:52
  • 浅谈中小站长站点运营推广

    2008-04-02 11:47:00
  • 在 Linux 终端中查找域名 IP 地址的命令(五种方法)

    2021-04-11 06:14:16
  • 雅虎CEO杨致远披露内幕:收购失败责在微软

    2008-05-07 19:21:00
  • Windows Server网络负载均衡技术

    2008-12-08 08:28:00
  • 五款主流ARP防火墙评测 拦截性能大比拼!

    2010-02-21 12:47:00
  • 山雨欲来风满楼 cmstop面世前的五大猜想

    2009-08-29 09:44:00
  • 利用翻译工具制造原创文章

    2008-10-26 17:06:00
  • 搭建Wordpress Mu的插件和注意事项

    2010-03-22 12:09:00
  • 链接的点击率是否影响到链接所发挥的作用

    2009-02-17 10:26:00
  • 优化从网站的基础入手 着重网站的设计重点

    2008-12-30 09:39:00
  • 浅谈linux kernel对于浮点运算的支持

    2023-08-05 04:52:30
  • linux shutdown命令详解

    2022-02-16 23:45:32
  • Linux中可以节省你时间的15个命令别名

    2023-07-20 00:27:12
  • 如何防止垃圾邮件用你的邮件服务器转发

    2007-08-15 14:23:00
  • asp之家 网站运营 m.aspxhome.com