当使用terminfo时,需要做的第一件事就是调用函数setupterm来设置终端类型。这将为当前的终端类型初始化一个TERMINAL结构。然后,你就可以查看当前终端的功能标志并使用他们的功能了。

#include <term.h>

int setupterm(char *term, in fd, int *errret);

-----------------------------------------------------

1、清屏功能;2、在屏幕上移动光标并将数据写入到屏幕的不同位置。

在成功调用setupterm函数之后,可以通过下面的三个函数调用来访问terminfo的功能标志。

int tigetflag(char* capname);     返回terminfo中的布尔功能标志的值

int tigetnum(char* capname);    返回terminfo中的数值功能标志的值

char* tigetstr(char* capname);  返回terminfo中的字符串功能标志的值

------------------------------------------------------------

下面程序使用terminfo数据库来查找当前终端的显示区大小

在编译程序时需要链接库  -lncurses

安装库:sudo apt-get install libncurses5-dev

#include <stdio.h>
#include <termios.h>

int main()
{
    int nrows;
    int ncolumns;
    setupterm(NULL, fileno(stdout), (int*)0);

nrows = tigetnum("lines");

ncolumns = tigetnum("cols");

printf("nrows=%d ncolumns=%d\n", nrows, ncolumns);

return 0;
}

-------------------------------------

下面三个重要的函数:

#include <term.h>

char* tparm(char* cap,  long p1,  long p2, ..., long p9);

int putp(char* const str);

int tputs(char* const str, int affcnt, int (*putfunc) (int));

-------------------------------

实现移动光标的功能:

使用tigetstr函数来获取xterm终端类型的光标移动功能标志cup的值,得到一个参数化的结果\E[%p1%d;%p2%dH

这个功能标志需要有两个参数:光标移动到的行号和列号。这个两个坐标都是从0开始计算的,(0,0)表示屏幕的左上角

使用 tparm 函数用实际的数值替换功能标志中的参数,一次最多可以替换9个参数,并返回一个可用的escape转义序列

当用tparm函数构造好终端的escape转移序列后,你必须将其发送到终端,使用函数putp或者tputs将字符串发送到终端,不能使用printf函数。

函数调用putp(string)就等同于函数调用tputs(string, 1, putchar)

tputs函数是为了不能通过标准输出stdout访问终端的情况准备的,它可以指定一个用于输出字符的函数。

----------------

移动光标

测试代码:

#include <stdio.h>
#include <termios.h>

int main()
{
    char* cursor;
    char* esc_sequence;

setupterm(NULL, fileno(stdout), (int*)0);

cursor = tigetstr("cup");

esc_sequence = tparm(cursor,50, 50);

putp(esc_sequence);

return 0;
}

----------------------------------------------

清除屏幕

#include <stdio.h>
#include <termios.h>

int main()
{
    char* clear;
    char* esc_sequence;

setupterm(NULL, fileno(stdout), (int*)0);

clear = tigetstr("clear");

putp(clear);

return 0;
}

另一种使用方法:

#include <stdio.h>
#include <termios.h>

static FILE* output_stream = (FILE*)0;
static int char_to_terminal(int char_to_write);

int main()
{
    char* clear;
    char* esc_sequence;

output_stream = fopen("/dev/tty", "w");

setupterm(NULL, fileno(stdout), (int*)0);

clear = tigetstr("clear");

tputs(clear, 1, char_to_terminal);

return 0;
}

int char_to_terminal(int char_to_write)
{
    if (output_stream)
    {
        putc(char_to_write, output_stream);
    }

return 0;
}

最新文章

  1. iis 发布MVC HTTP错误 403.14
  2. Lua知识备忘录
  3. WebRTC VideoEngine超详细教程(三)——集成X264编码和ffmpeg解码
  4. ACM题目————图的广度优先搜索
  5. 在Windows驗證網站設定部分匿名存取
  6. inno setup 在卸载时如果想保留文件 使用uninsneveruninstall
  7. uva 10859
  8. thinkphp 开发的获取用户信息
  9. 使用__autoload()来管理文件导入
  10. PYTHON-进阶-ITERTOOLS模块
  11. Mysql动态sql语句,用当前时间做表名
  12. s​q​l​ ​s​e​r​v​e​r​ ​2​0​0​0​登​录​名​与​数​据​库​用​户​名​的​关​联​问​题
  13. ShoneSharp语言(S#)的设计和使用介绍系列(3)— 修炼工具
  14. Android单元测试之一:基本概念
  15. Java(常用排序算法)
  16. C# 对话框使用整理
  17. 在Linux下OpenCV的下载和编译
  18. leetcode题解 200. Number of Islands(其实就是一个深搜)
  19. 大型运输行业实战_day12_1_权限管理实现
  20. SpringMVC(九) RequestMapping请求参数

热门文章

  1. 【海岛帝国系列赛】No.2 海岛帝国:“落汤鸡”市的黑帮危机
  2. springmvc简述
  3. angularjs 相关资料
  4. IoC 依赖注入、以及在Spring中的实现
  5. android 学习随笔二十八(应用小知识点小结 )
  6. Sublime Text使用教程【转】
  7. JS调用Java函数--DWR框架
  8. 8、web入门回顾/ Http
  9. javascript 中==和===的区别
  10. SDUT 2416:Fruit Ninja II