GNU-ncurses库简介

文章目录

  • 前言
  • 一、安装与使用
  • 二、ncurses库基本用法
    • 2.1 initscr()
    • 2.2 refresh()
    • 2.3 endwin()
  • 三、初始化
    • 3.1 raw(), cbreak()
    • 3.2 echo() noecho()
    • 3.3 keypad()
    • 3.4 int halfdelay(int)
  • 四、窗口机制简介
  • 五、输出函数
  • 六、输入函数
  • 七、输出修饰
  • 八、窗口机制
  • 总结


前言

ncurses是一个管理应用程序在字符终端显示的函数库。它提供了移动光标,建立窗口,产生颜色,处理鼠标操作等功能。
ncurses提供的是字符用户界面,而非图形用户界面。


一、安装与使用

在Ubuntu下执行如下命令

sudo apt-get install libncurses5-dev

在编译时需要加上-lncurses选项

在运行编译好的二进制文件时也要安装ncurses库

二、ncurses库基本用法

#include <ncurses.h>int main()
{initscr();  // 初始化,进入ncurses模式,创建虚拟屏幕printw("hello world");  // 在虚拟屏幕上光标位置打印 hello worldrefresh();  // 将虚拟屏幕上的内容写到显示器上,并刷新getchar();  // libcendwin();   // 推出ncurses模式
}

2.1 initscr()

将终端屏幕初始化为curses模式,该函数初始化了curses系统并且为当前屏幕(“stdscr”)和相关的数据结构分配内存。

2.2 refresh()

printw函数用于向stdscr虚拟屏幕缓冲区写入数据,refresh函数负责将stdscr缓冲区中的数据显示在屏幕上。refresh只核查窗口和数据中变动的部分。

2.3 endwin()

释放了curses子系统和相关数据结构占用的内存,使得能够正常返回控制台模式,否则程序推出后终端显示会变得异常。

三、初始化

初始化后curses session的模式及功能包括:terminal mode, color mode, mouse mode 等

3.1 raw(), cbreak()

一般而言,终端驱动程序会缓冲用户输入的字符,直到遇到换行符或者回车符后,这些字符才可以被使用。raw和cbreak可以禁止行缓冲(line buffering):row可以处理ctrl+z, ctrl+c等控制字符,将其传送至程序而不产生终端信号;cbreak则不会这样处理.

3.2 echo() noecho()

noecho() 禁止输入的字符出现在屏幕上

3.3 keypad()

为stdscr激活功能键 keypad(stdscr, true)

3.4 int halfdelay(int)

以 0.1 s 为单位等待用户输入,若在规定的时间内没有输入则返回#define ERR -1

#include <unistd.h>
#include <stdio.h>
#include <ncurses.h>int main()
{initscr();   // 开始curses模式int ch;curs_set(false);  // 关闭光标显示raw();  // 禁用输入缓冲keypad(stdscr, TRUE);  // 没有它当按下Fn时程序似乎不正常noecho();   // 当执行getch函数时关闭键盘回显// 向缓冲区stdscr中写数据printw("Type any character to seee it in bold\n");// 用法同getchar,但又有区别,可尝试换成getchar会怎样// curses库中getch与getchar用法相似,但如果用getchar函数会出现的显示上的问题// 这个问题有待进一步探究ch = getch();  // 如果没有raw()函数必须按下enter时才将字符传给程序for (int i = 1; i<=12; ++i) {// 如果没有keypad将不会执行这条语句if (ch == KEY_F(i)) {printw("F%d Key pressed", i);// 如果没有noecho一些控制字符将被打印到屏幕上goto conti_exe;}}printw("The pressed key is ");attron(A_BOLD);  // 看名知意printw("%c", ch);attroff(A_BOLD);conti_exe:refresh();  // 将stdscr的内容显示到屏幕getch();    // 等待用户输入endwin();  // 结束curses模式}

四、窗口机制简介

printw(string);  // 在窗口stdscr的当前坐标输出string
refresh();// w+  指定窗口显示
wprintw(win, string);  // 在win上写string
wrefresh(win);  // 刷新窗口win// mv+ 在指定位置打印
mvprintw(y, x, string);  在stdscr的(y, x)处写string
mvwprintw(win, y, x, string);  // 在win的(y, x)处写string 

五、输出函数

addch()系列:将单一的字符打印到屏幕上,可以附加字符修饰参数的一类函数
printw()系列:类似printf格式化输出
addstr()系列:打印字符串

addch( ch | A_BOLD | A_UNDERLINE);

attrset(), 不可叠加文本属性
attron(), attroff() 可叠加文本属性

ACS_ 开头的宏可用于绘制一些简单的表格、线条等

vwprintw()和vprintf()相似,用于打印变量表中所对应的变量(没用过)

指定窗口指定位置指定窗口+位置
addchwaddchmvaddchmvwaddch
addstrwaddstrmvaddstrmvwaddstr
printwwprintwmvprintwmvwprintw

getmaxyx

    initscr();curs_set(false);raw();keypad(stdscr, TRUE);noecho();char mesg[] = "Just a string";int row, col;getmaxyx(stdscr, row, col);mvprintw(row/2, (col-strlen(mesg))/2, "%s", mesg);mvprintw(row-2, 0, "This screen has %d rows and %d columns\n", row, col);printw("Try resizing your window(if possible and then run this prog)");refresh();getch();endwin();

六、输入函数

getch() 系列:读取一个字符
scanw()系列:按照格式化读取输入
getstr() 系列:读取字符串

scanwwscanwmvscanwmvwscanw
    char mesg[] = "Just a string";char str[80];int row, col;getmaxyx(stdscr, row, col);mvprintw(LINES/2, (COLS-strlen(mesg))/2, "%s", mesg);getstr(str);mvprintw(LINES-2, 0, "You ENtered:%s\n", str);printw("row:%d, col:%d, LINES:%d", row, col, LINES);

七、输出修饰

#include <unistd.h>
#include <stdio.h>
#include <ncurses.h>
#include <string.h>
#include <stdlib.h>int main(int argc, char* argv[])
{//int ch, prev;FILE *fp;int goto_prev = false, y, x; /* sdfg*/if (argc != 2){printf("error");exit(1);}fp = fopen(argv[1], "r");if (fp == NULL){perror("Connot open inputfile");exit(1);}initscr();curs_set(false);raw();keypad(stdscr, TRUE);noecho();prev = EOF;while ((ch = fgetc(fp)) != EOF){if (prev == '/' && ch == '*'){attron(A_BOLD);goto_prev = true;}if (goto_prev == true){getyx(stdscr, y, x);move(y, x -1);printw("%c%c", '/', ch);ch = 'a';goto_prev = false;}else{printw("%c", ch);}refresh();if (prev == '*' && ch == '/'){attroff(A_BOLD);}prev = ch;}///refresh();getch();endwin();}
说明
A_NORMAL普通字符
说明
attrset会覆盖之前的设置
attron会追加
attroff只会关闭特定修饰
standend()等价于attrset(A_NORMAL)
attr_get()获得当前窗口修饰属性设置及背景、文字颜色
需要在设置的修饰之后才能使用
attr_类函数
wattr_类函数
chgat()
wchgat()
mvchgat()
mvwchgat()
    start_color();init_pair(1, COLOR_CYAN, COLOR_BLACK);printw("A Big string which i didn't care to type fully");mvchgat(0, 10, 4, A_BLINK, 1, NULL);//  第三个参数表示从光标开始的向后几个字符,-1代表整行, 

八、窗口机制


总结

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/83525.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mySQL 安装

一、windows安装包下载 mysql官网提供了两种安装方式&#xff0c;一个是zip安装&#xff0c;另一个是msi安装&#xff0c;这里简绍第一种安装方式&#xff0c;第二种简单&#xff0c;不再简绍 官网下载&#xff0c;根据自己需要选择版本&#xff1a;MySQL :: MySQL Community…

ReactNative中升级IOS 17版本Crash解决

ReactNative中升级IOS 17版本Crash解决 ReactNative中升级IOS 17版本Crash解决一、问题描述二、原因分析三、解决方案决策3.1 设置宽高为非零值3.2 使用新的UIGraphicsImageRenderer替换就版本的UIGraphicsBeginImageContext 四、可能使用到该API的三方库4.1 react-native-fast…

反转单链表

思路图1&#xff1a; 代码&#xff1a; struct ListNode* reverseList(struct ListNode* head){if(headNULL)//当head是空链表时 {return head; }struct ListNode* n1NULL;struct ListNode* n2head;struct ListNode* n3head->next;if(head->nextNULL)//当链表只有一个节…

高云FPGA系列教程(8):ARM串口数据接收(中断和轮询方式)

文章目录 [toc]1. GW1NSR-4C串口外设简介2. FPGA配置3. 常用函数4. 轮询方式接收数据5. 中断方式接收数据 本文是高云FPGA系列教程的第8篇文章。 本篇文章介绍片上ARM Cortex-M3硬核处理器串口外设的使用&#xff0c;演示轮询方式和中断方式接收串口数据&#xff0c;并进行回环…

如何搭建一个react项目(详细介绍)

要搭建一个基本的 React 项目&#xff0c;你需要执行以下步骤。在开始之前&#xff0c;请确保你已经安装了 Node.js 和 npm&#xff08;Node 包管理器&#xff09;。 搭建一个React项目 1&#xff0c;创建项目目录2&#xff0c;初始化项目3&#xff0c;安装 React 和 ReactDOM4…

安卓机型固件系统分区的基础组成 手机启动规律初步常识 各分区的基本含义与说明

此贴为基本常识。感兴趣的友友可以了解手机的启动顺序和各模式的基本操作与意义。另外了解手机系统分区各文件夹的含义 分区说明对应贴&#xff1a;安卓机型固件中分区对应说明 手机开机基本启动顺序 当我们按下手机开机键的时候。基本的启动顺序为 注意&#xff1a;该结构图…

交流耐压试验目的

试验目的 交流耐压试验是鉴定电力设备绝缘强度最有效和最直接的方法。 电力设备在运行中&#xff0c; 绝缘长期受着电场、 温度和机械振动的作用会逐渐发生劣化&#xff0c; 其中包括整体劣化和部分劣化&#xff0c;形成缺陷&#xff0c; 例如由于局部地方电场比较集中或者局部…

Facebook最佳聊单工具--SaleSmartly,智能回复+控评+群控分流

关于SaleSmartlySaleSmartly--全渠道客户沟通平台,它可以帮助企业实现聊天自动化、智能化&#xff0c;提高员工效率&#xff0c;降低人工成本&#xff0c;提升客服质量。 在管理facebook时&#xff0c;你遇到的痛点&#xff1a; &#xff08;1&#xff09;FB聊单如何实现业务最…

AUTOSAR汽车电子嵌入式编程精讲300篇-车载CAN总线网络的异常检测(续)

目录 车载 CAN 总线网络异常检测技术 3.1 车载 CAN 总线网络异常检测技术概述 3.1.1基于统计的异

7-3 成绩等级

7-3 成绩等级 给出一个成绩&#xff0c;要求输出成绩等级‘A’,‘B’,‘C’,‘D’,‘E’.(90分以上为’A’,80到89分为’B’,70到79分为’C’,60到69分为’D’,60分以下为’E’。 输入格式: 在一行输入一个整数n&#xff08;n<100)。 输出格式: 在一行中输出成绩相对应的等…

大麦订单生成器最新版 大麦订单一键生成截图

1.可以一键添加&#xff0c;生成的假订单没有水印&#xff0c;界面也很真实。 2.在软件中输入生成的信息&#xff0c;这是产品信息&#xff0c;选择生成的产品图像&#xff0c;最后生成它。 后台一键生成&#xff0c;独立后台管理 教程&#xff1a;解压源码&#xff0c;修改…

用于无功补偿的固定电容晶闸管控制反应器研究(Simulink)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

03MyBatis-Plus中的常用注解

常用注解 TableName MyBatis-Plus根据BaseMapper中指定的泛型(实体类型名)确定数据库中操作的表,如果根据实体类型名找不到数据库中对应的表则会报表不存在异常 //向表中插入一条数据 Test public void testInsert(){User user new User(null, "张三", 23, "…

深入学习 Redis Sentinel - 基于 DockerCompose 编排哨兵分布式架构,理解工作原理

目录 一、哨兵模式 1.1、为何引入哨兵模式 1.2、Redis Sentinel 分布式架构 1.2.1、概述 1.2.2、工作原理&#xff08;redis 哨兵的核心功能&#xff09; 1. 监控&#xff1a; 2. 自动故障转移&#xff1a; 3. 通知 1.2.3、问题&#xff1a;哨兵结点只有一个可以么&am…

SpringCloud——微服务

微服务技术栈 在之前的开发过程中&#xff0c;我们将所有的服务都部署在一台服务器中&#xff0c;当我们的服务开始越来越多&#xff0c;业务越来越复杂&#xff0c;当一台服务器不能承担我们的业务的时候&#xff0c;就需要将不同的业务分开部署在不同的服务器上&#xff0c;…

Feign实战-Springboot集成OpenFeign Demo以及参数详解

最近整理一下微服务的文章&#xff0c;先拿一直用的OpenFeign开刀 思考&#xff1a;微服务之间如何方便优雅的实现服务间的远程调用 一、说说openFeign是什么吧&#xff1f; 说到这个&#xff0c;那不得不先说说RPC 1.什么是RPC RPC 全称是 Remote Procedure Call &#x…

Appium混合页面点击方法tap的使用

原生应用开发&#xff0c;是在Android、IOS等移动平台上利用官方提供的开发语言、开发类库、开发工具进行App开发&#xff1b;HTML5&#xff08;h5&#xff09;应用开发&#xff0c;是利用Web技术进行的App开发。目前&#xff0c;市面上很多app都是原生和h5混合开发&#xff0c…

消息队列常见问题

什么是消息队列&#xff1f;请简要解释消息队列的工作原理。 答&#xff1a;消息队列是一种异步通信机制&#xff0c;用于在应用程序之间传递消息。它主要包括生产者&#xff08;Producer&#xff09;、消息队列&#xff08;Message Queue&#xff09;和消费者&#xff08;Con…

竞赛选题 基于深度学习的中文情感分类 - 卷积神经网络 情感分类 情感分析 情感识别 评论情感分类

文章目录 1 前言2 情感文本分类2.1 参考论文2.2 输入层2.3 第一层卷积层&#xff1a;2.4 池化层&#xff1a;2.5 全连接softmax层&#xff1a;2.6 训练方案 3 实现3.1 sentence部分3.2 filters部分3.3 featuremaps部分3.4 1max部分3.5 concat1max部分3.6 关键代码 4 实现效果4.…

知识库系统推荐,强大的全文检索与文档分类管理功能

在我们日常企业运营管理过程中&#xff0c;会积累大量的文档资料&#xff0c;对于我们全体成员来说&#xff0c;这些知识文档都是巨大的财富&#xff0c;所以整合并搭建一套知识库系统是非常有必要的。 知识库系统推荐 我们日常工作中产生大量的文档&#xff0c;随着存储技术的…