Linux学习笔记13——使用curses函数库

时间:2023-01-14 07:35:02

一 安装curses库

  如果你的Linux系统中curses库,直接敲入命令sudo apt-get install libncurses5-dev,然后就会自动安装curses库,安装好之后敲入命令:

  ls -l /usr/include/*curses.h,我上面显示的是这样:Linux学习笔记13——使用curses函数库

二 curses库有什么作用

 curses函数库能够优化光标的移动并最小化需要对屏幕进行的刷新,从而也减少了必须向字符终端发送的字符数目。

三 认识curses库

  1:curses函数库用两个数据结构来映射终端屏幕,它们是stdscr和curscr。

     stdscr数据结构对应的是标准屏幕(在窗口下,这个一般作为窗口的指针)

     curscr对应的是当前屏幕

  2:所有的curses函数使用的坐标都是y值(行号)在前,x值(列号)在后。每个位置不仅包含该屏幕位置处的字符,还包含它的属性。

  3:所有的curses程序必须以initscr函数开始,以endwin函数结束    

#include <curses.h>
WINDOW *initscr(void);//initscr函数在一个程序中只能调用一次,如果成功,它返回一个指向stdscr结构的指针;如果失败,它就输出一条诊断错误信息并使程序退出
int endwin(void);

  4 输出到屏幕

#include <curses.h>
int addch(const chtype char_to_add);                      //在光标的当前位置添加指定的字符
int addchstr(chtype *const string_to_add);                   //在光标的当前位置添加指定的字符串
int printw(char *format,...);                          //对字符串进行格式化,然后将其添加到光标的当前位置
int refresh(void);                                 //刷新物理屏幕
int box(WINDOW *win_ptr,chtype vertical_char,chtype horizontal_char);   //围绕一个窗口绘制方框
int insch(chtype char_to_insert);                         //插入一个字符
int insertln(void);                                //插入一个空白行
int delch(void);                                  //删除一个字符
int deleteln(void);                                //删除一个空白行
int beep(void);                                   //发出蜂鸣
int flash(void);                                  //使屏幕闪烁

  5 从屏幕读取

#include <curses.h>
chtype inch(void); //返回光标当前位置的字符及其属性信息

  6 清除屏幕

#include <curses.h>
int erase(void);   //在每个屏幕位置写上空白字符
int clear(void);   //清除整个屏幕,而不是尝试删除当前屏幕上每个非空白的位置
int clrtobot(void); //清除当前坐标位置直到屏幕结尾的所有内容
int clrtoeol(void); //清除当前坐标位置直到坐标所处行行尾的所有内容

  7 移动坐标

#include <curses.h>
int move(int new_y,int new_x);        //移动逻辑光标
int leaveok(WINDOW *window_ptr,bool leave_flag); //leave_flag默认为false,表示硬件光标将停留在逻辑光标所处的位置,
                             //如果该标志被设置为true,则硬件光标会被随机的放置在屏幕上的任意位置

  8 字符属性

#include <curses.h>
int attron(chtype attribute);   //启用指定的属性
int attroff(chatype attribute);  //关闭指定的属性
int attrset(chtype attribute);
int standout(void);        
int standend(void);

  预定义的属性有:A_BLINK A_BOLD A_DIM A_REVERSE A_STANDOUT 和A_UNDERLINE

  9 键盘输入

#include <curses.h>
int getch(void);
int getstr(char *string);               //对返回的字符串的长度没有限制
int getnstr(char *string,int number_of_characters);  //对返回的字符串长度有限制,尽量用这个函数取代getstr函数
int scanw(char *format,...);

  10 窗口

#include <curses.h>
WINDOW *newwin(int num_of_lines,     //行数
    int num_of_cols,   //列数
    int start_y,    //起始坐标y值
    int start_x        //起始坐标x值
        );              //创建窗口,如果新窗口的任何部分落在当前屏幕范围之外,则newwin函数调用将失败
int delwin(WINDOW *window_to_delete);  //删除窗口

  11 关于加前缀

    如果给函数增加了w前缀,就必须在该函数的参数表的最前面增加一个WINDOW指针参数
    如果给函数增加的是mv前缀,则需要在函数的参数表的最前面增加两个参数,分别是纵坐标y和横坐标x,坐标值y和x是相对于窗口的
    如果给函数增加了mvw前缀,就需要多传递3个参数,分别是一个WINDOW指针,y和x坐标值

  12 移动和更新窗口

#include <curses.h>
int mvwin(WINDOW *window_to_move,int new_y,int new_y);  //在屏幕上移动一个窗口
int wrefresh(WINDOW *window_ptr);
int wclear(WINDOW *window_ptr);
int werase(WINDOW *window_ptr);                //wrefresh,wclear,werase分别是前面refresh,clear,erase的通用版本
int touchwin(WINDOW *window_ptr);             //通知curses函数库其指针参数指向的窗口内容已发生改变
int scrollok(WINDOW *window_ptr,bool scroll_flag);    //如果scroll_flag为true,则允许窗口卷屏
int scroll(WINDOW *window_ptr);               //把窗口内容上卷一行

  13 优化屏幕刷新

#include <curses.h>
int wnoutrefresh(WINDOW *window_ptr); //决定哪些字符发送到屏幕上,但是不真正发送
int doupdate(void);           //将更新发送到终端,效果和wrefresh一样

  14 子窗口

#include <curses.h>
WINDOW *subwin(WINDOW *parent,int num_of_lines,int num_of_cols,int start_y,int start_x);  //创建子窗口
int delwin(WINDOW *window_to_delete);                                //删除子窗口

  子窗口和新窗口之间的区别:子窗口没有自己独立的屏幕字符存储空间,它们与其父窗口共享同一字符存储空间,因此对子窗口中内容的任何修改都会反映到其父窗口中
  子窗口的用途:提供了一种简洁的方式来卷动另一个窗口里的部分内容
  对子窗口的限制:在应用程序刷新屏幕之前必须先对其父窗口调用touchwin函数

  15 keypad模式

#include <curses.h>
int keypad(WINDOW *window_ptr,bool keypad_on);  //keypad_on为true时,开启keypad模式

  在keypad模式下,curses将接管按键转义序列的处理工作,该键盘操作不仅能够返回用户按下的键,还将返回与逻辑按键对应的KEY_定义

  16 彩色显示
  在使用curses函数库的颜色功能之前,必须检查当前终端是否支持彩色显示功能,然后对curses的颜色例程进行初始化

#include <curses.h>
bool has_colors(void);
int start_color(void);//has_colors函数返回true时在调用这个函数

  颜色组合:在使用curses的颜色功能时,必须同时定义一个字符的前景色和背景色
  在把颜色作为属性使用之前,必须首先调用init_pair函数对准备使用的颜色组合进行初始化

#include <curses.h>
int init_pair(short pair_number,                           //颜色对的编号
        short foreground,                           //前景色
        short background);                           //背景色
int COLOR_PAIR(int pair_number);                          //使用指定的着色方式
int pair_content(short pair_number,short *foreground,short *background);  //获取已定义的颜色组的信息

  例如:init_pair(1,COLOR_RED,COLOR_GREEN);    //颜色都是以COLOR_开头
       wattron(window_ptr,COLOR_PAIR(1));      //将该颜色组合作为属性来访问,把屏幕上后续添加的内容设置为绿色背景上的红色内容

  17 pad

#include<curses.h>
WINDOW *newpad(int number_of_lines,int number_of_columns);  //创建pad
int prefresh(WINDOW *Pad_ptr,
        int pad_row,
        int pad_column,
        int screen_row_min,
        int screen_col_min,
        int screen_row_max,
        int screen_col_max
       );//指定希望放到屏幕上的pad范围及其在屏幕上的位置

  18 编译时,需要在命令后面加上-lcurses,否在会出现“undefined reference to”的错误。

Linux学习笔记13——使用curses函数库的更多相关文章

  1. 学习笔记二十三——字符函数库cctype【转】

    本文转载自: 字符函数库cctype 在头文件cctype(ctype.h)中定义了一些函数原型,可以简化输入确定字符是否为大写字母.数字.标点符号等工作. 例如: 如果ch是一个字母,则isalph ...

  2. linux学习笔记之文件结构和函数

    本文参考<UNIX环境高级编程> 一.基础介绍. 1:文件的构成. 1,首先声明,这里的文件和目录,表示普通的文件和目录.不确定是否可以应用到:设备,管道等特殊形式的文件(UNIX把它们也 ...

  3. Linux学习笔记13-用户和组

    操作系统通过用户.组概念来管理使用计算机的人 用户代表一个使用计算机的使用者,操作系统通过用户概念限制一个使用者能够访问的资源 组用来组织管理用户 用户具有以下概念: 每个用户有一个用户名和一个用户I ...

  4. Arduino101学习笔记(八)&mdash&semi;&mdash&semi; 函数库

    /*********最小值*********/ min() //实现:#define min(a,b) ((a)<(b)?(a):(b)) /*********最大值*********/ max ...

  5. Linux学习笔记13—Vi编辑器的学习

    文本编辑工具vim.vi1. vim与vi的最大区别是vim编辑的时候是带颜色显示的.Vi不带颜色显示.2. yum install -y vim-enhanced 如果没有安装VIM 使用上面的命令 ...

  6. linux学习笔记-13&period;进程控制

    1.查看用户最近登录情况 lastlastlog 2.查看硬盘使用情况 df 3.查看文件大小 du 4.查看内存使用情况 free 5.查看文件系统 /proc 6.查看日志 ls /var/log ...

  7. Linux学习笔记(一)2015&period;4&period;13

    研究生由单片机转Linux学习 首先安装VMware虚拟机,用的是VMware 10.0 在VMware 10.0上安装视频上推荐的Red Hat Linux 5 安装后正式进入Linux学习 笔记1 ...

  8. linux curses函数库

    fedora20,安装yum install ncurses-devel 编译时:-lncurses 头文件:#include<curses.h> 参考:man ncurses \linu ...

  9. Linux&&num;160&semi;学习笔记之超详细基础linux命令&&num;160&semi;Part&&num;160&semi;13

    Linux学习笔记之超详细基础linux命令 by:授客 QQ:1033553122 ---------------------------------接Part 12---------------- ...

随机推荐

  1. wamp2&period;4允许局域网访问,如Android模拟器和手机

    Apache 从2.2升级到 Apache2.4.x 后配置文件 httpd.conf 的设置方法有了大变化,以前是将 deny from all 全部改成 Allow from all 实现外网访问 ...

  2. javascript每日一练(六)——事件一

    一.event对象 var oEvent = ev || event;//获取事件对象 oEvent.clientX oEvent.clientY//获取鼠标坐标 oEvent.cancelBubbl ...

  3. CSS3 Filter滤镜效果

    关注到它是在一次分享会当中,很神奇,只需写一行代码就可以变身很美的视觉效果,这就是CSS3滤镜. 语法 filter:fuction(param); 如今浏览器支持情况相比以前乐观很多,点击查看兼容 ...

  4. 笔记-CGRectInset CGRectoffset UIEdgeInsetsInsetRect 这三个函数的使用情况

    //CGRectInset 将原来的矩形放大或者缩小,正表示缩小,-表示放大. CGRect rect= CGRectMake(20, 50, 100, 80); CGRect rect1=CGRec ...

  5. 好程序员web前端分享想要学习前端需要学那些课程

    好程序员web前端分享想要学习前端需要学那些课程,仔细思考了一下如何回答好这个话题,其实前端是一个涵盖面非常之广泛的一个职位,所需知识体系非常庞杂,与传统语言“想要精一行,必先通一门” 有很大差别, ...

  6. Codeforces 977D: Divide by three&comma; multiply by two(暴力)

    题意 有nnn个无序的数,对这些数进行排列,要求ai=3×ai+1a_i=3\times a_{i+1}ai​=3×ai+1​或2×ai=ai+12\times a_i=a_{i+1}2×ai​=ai ...

  7. js 可拖动div 调整大小

    dragBorder: function (parent, right, bottom, bottomRight) { var isDownRight = false; var isDownBotto ...

  8. OAuth2认证和授权:AuthorizationCode认证

    前面的OAuth2认证,里面的授权服务器都是用的identityserver4搭建的 ids4没有之前一般都是Owin搭建授权服务器,博客园有很多 ids4出来后,一般都是用ids4来做认证和授权了, ...

  9. spring aop通过注解实现日志记录

    首先是几个概念:连接点(Joinpoint).切点(Pointcut).增强(Advice).切面(Aspect) 另外也要使用到注解. 需求:通过注解定义LogEnable.然后程序运行能够识别定义 ...

  10. tp5消息队列使用

    composer 安装 扩展包 composer require topthink/think-queue 注意版本:默认安装5.1的扩展包 地址: https://packagist.org/pac ...