linux下curses的用法

【Linux】【harmonyOs】【Curses】交叉编译鸿蒙系统的 Curses 库 摘要: 本文详细介绍了在鸿蒙系统(HarmonyOS)上交叉编译Curses库的过程。首先通过下载ncurses-6.4源码并配置安装目录,然后解决因系统识别问题导致的编译错误(更新config.sub/config.guess脚本)。关键步骤包括:指定目标架构为aarch64-linux-ohos,配置共享库和静态库选项,并最终通过make完成编译。验证生成的ARM64格式库文件表明编译成功,为依赖Curses的鸿蒙应用开发提供了基础支持。整个过程展示了标准库在跨平台移植中的典型处理方案。 阅读详情

转载:
https://www.cnblogs.com/dandingyy/archive/2012/08/23/2651644.html

1、术语概念

curses工作在屏幕,窗口和子窗口之上。屏幕是设备全部可用显示面积(对终端是该窗口内所有可用字符位置),窗口与具体例程有关。如基本的stdscr窗口等。

curses使用两个数据结构映射终端屏幕,stdscr和curscr。stdscr是“标准屏幕”(逻辑屏幕),在curses函数库产生输出时就刷新,是默认输出窗口(用户不会看到该内容)。curscr是“当前屏幕”(物理屏幕),在调用refresh函数是,函数库会将curscr刷新为stdscr的样子。

使用initscr();和endwin();两个函数对函数库进行初始化和重置。

#include<curses.h>
    
WINDOW *initscr(void);
int endwin(void);

2、屏幕

输出到屏幕:

int addch(const chtype char_to_add);
int addchstr(chtype *const string_to_add);    //当前位置添加字符(串)

int printw(char *format, ...);   //类似与printf
int refresh(void);    //刷新物理屏幕
int box(WINDOW *win_ptr, chtype vertical, chtype horizontal);   //围绕窗口绘制方框
int insch(chtype char_to_insert);   //插入一个字符(已有字符后移)
int insertln(void);   //插入空白行
int delch(void);
int deleteln(void);   //删除字符和空白行

int beep(void);   //终端响铃
int flash(void);   //闪烁

从屏幕读取字符:

chtype inch(void);  //返回光标位置字符
int instr(char *string);  //
int innstr(char *string, int numbers);  //将返回内容写入字符数组中

清除屏幕:

int erase(void);   //在屏幕的每个位置写上空白字符
int clear(void);    //使用一个终端命令来清除整个屏幕,内部调用了clearok来执行清屏操作,(在下次调用refresh时可以重现屏幕原文)
int clrtobot(void);   //清除光标位置到屏幕结尾的内容
int clrtoeol(void);    //清除光标位置到该行行尾的内容

移动光标:

int move(int new_y, int new_x);    //移动stdcsr的光标位置

字符属性(指对字符设置加粗,反色显示等):

预定义的属性:A_BLINK, A_BOLD, A_DIM, A_REVERSE, A_STANDOUT, A_UNDERLINE.
int attron(chtype attribute);
int attroff(chtype attribute);   //启用或关闭某属性
int attrset(chtype attribute);
int standout(void);
int standend(void);          //这两个表示更加通用的强调模式,通常映射为反白显示

3、键盘

键盘模式:

int echo();
int noecho();  //用于开启和关闭键盘输入字符的回显

//完成initscr后,输入模式为预处理模式,(1)所有处理是基于行的,就是说,只有按下回车,输入数据才被传给程序;(2)键盘特殊字符启用,按下合适组合键会产生信号

int cbreak();   //设置cbreak模式,字符一键入,直接传给程序
int nocbreak();  //关闭

int raw();    //关闭特殊字符处理
int noraw();   //同时回复默认模式和特殊字符处

键盘输入:

//与标准io库的getchar, gets, scanf类似

int getch();
int getstr(char *string);
int getnstr(char *string, int number);  //建议使用
int scanw(char*format,...);

4、窗口

curses函数库支持在一个物理屏幕上显示多个窗口。

  • WINDOW结构:

从前面initscr返回可以看到,标准屏幕stdscr实际上就是WINDOW结构的,它的作用类似与标准输出stdout。所以可以使用下面函数自己创建和销毁窗口。

WINDOW *newwin(int lines, int cols, int start_y, int start_x);   //创建从(start_y, start_x)开始的lines行,cols列的窗口。
int delwin(WINDOW *window);   //销毁上面创建的窗口,千万不要删除stdscr和curscr!

当lines和cols为0时,说明新窗口右下角落在屏幕右下角上。

  • 通用函数

前面的addch和printw函数用于在屏幕上增加字符,它们都可以通过增加前缀变为通用函数。

前缀w用于窗口(添加一个WINDOWS指针参数),mv用于光标移动(在该位置执行操作addch或printw)
(添加两个坐标值参数),mvw用于在窗口中移动光标。组成如下函数:

addch, waddch, mvaddch, mvwaddch
printw, wprintw, mvprintw, mvwprintw
  • 移动和更新窗口
int mvwin(WINDOW *win, int new_y, int new_x);   //移动窗口

int wrefresh(WINDOW *win);
int wclear(WINDOW *win);
int werase(WINDOW *win);
//类似于上面的refresh, clear, erase,但是此时针对特定窗口操作,而不是strcsr

int touchwin(WINDOW *win);     //指定该窗口内容已改变
int scrollok(WINDOW *win, bool flag);    //指定是否允许窗口卷屏
int scroll(WINDOW *win);   //把窗口内容上卷一行

5、子窗口

子窗口除了没有自己的屏幕字符存储空间外,其他与新窗口相同。
主要用于卷动另一窗口只能个的部分内容,将这部分区域设为子窗口,然后卷动即可。

WINDOW *subwin(WINDOW *parent, int lines, int cols, int start_y, int start_x);   //创建子窗口。
int delwin(WINDOW *window);   //销毁子窗口

6、keypad模式

另外,键盘一般还会有方向键,功能键,数字小键盘,Insert, Home等按键。这些键会发送以""(转义字符)开头的字符串序列。解码这些键就要区分“单独按下\键”和“按下功能键而产生\开头的字符串序列”,

在curses函数库中,头文件curses.h提供了一组以KEY_为前缀的定义来管理逻辑键。
curses在启动时会 关闭转义序列与逻辑键之间的转换功能,需要调用如下函数开启:

int keypad(WINDOW *win, bool keypad_on);    //keypad_on参数为true时,启用keypad模式。此时读键盘操作能够返回 用户在按下逻辑键时对应的KEY_定义

7、彩色显示

curses能显示简单的彩色。必须同时定义一个字符的前景色和背景色,称为颜色组合。
首先,检查终端是否支持彩色显示,然后对curses颜色例程初始化:

bool has_colors(void);
int start_color(void);

若start_color成功返回OK,变量COLORS定义为可用颜色数目,一般为8种,
COLOR_PAIRS定义为可用颜色组合数目,一般为64种。

int init_pair(shor pair_number, short foreground, short background);    //初始化pair_number号颜色组合
int COLOR_PAIR(int pair_number);  //对pair_number号颜色组合作为属性来访问(用于前面的attr函数)
int pair_content(short pair_number, short *foreground, short *background);    //获取已定义的颜色组合信息
Linux终端图形库curses curses的名字起源于"cursor optimization",即光标优化。它最早由美国伯克利大学的Bill Joy和Ken Arnold编写的,用来处理一个游戏rogue的屏幕显示。后来贝尔实验室的Mark Horton在system III Unix中重新编写了curses。现在几乎所有的Unix,Linux操作系统都带了curses函数库,curses也加入了对鼠标的支持,一些菜单和面板的处理。 阅读详情

相关推荐

【Python随记】:curses 库的快速入门

文章目录curses 简介Python curses 模块 curses 简介 curses 是一个在Linux/Unix下广泛应用的图形函数库,作用是可以在终端内绘制简单的图形用户界面。 curses库为基于文本的终端提供了独立于终端的屏幕绘制和键盘处理功能;终端包括vt100、Linux控制台和各种程序提供的模拟终端。显示终端支持多种控制代码,实现移动光标、滚动屏幕、擦除区域等常用操作。不同的终端使用不同的代码,并且通常有各自的小缺点。 curses库提供了基本的功能,为程序员提供了包含多个不重叠

繁依Fanyi的博客 3902

了解第三方库函数——curses

每一个程序背后都站着一堆优秀的代码库。了解实际程序是如何借助第三方库函数完成代码设计。 1)了解Linux 系统中终端程序最常用的光标库(curses)的主要函数功能,写出几个基本函数名称及功能; 2)在 win10 系统中,“控制面板”–>“程序”—>“启用或关闭Windows功能”,启用 “telnet client” 和"适用于Linux的Windows子系统"(后面会使用)。 然后打开一个cmd命令行窗口,命令行输入 telnet bbs.newsmth.net,以游客身份体验一下.

Harriet的博客 1745

保姆级教程:用YOLOv5+ROS2 Humble搞定奥比中光Dabai DCW深度相机的3D物体定位

本教程详细介绍了如何使用YOLOv5模型和ROS2 Humble系统,结合奥比中光Dabai DCW深度相机实现3D物体定位。从环境配置、模型部署到深度数据融合,提供完整的实战指南,帮助开发者快速掌握三维坐标提取技术,适用于机器人开发和计算机视觉应用。

weixin_26765363的博客 270

python中的curses终端图形编程库

一.curses库安装 1.https://www.lfd.uci.edu/~gohlke/pythonlibs/#curses 到这个网站下载对应python版本的curses库,我的python是3.7,所以选择下面的版本 2.打开Anaconda Prompt,输入命令 pip install 文件名 pip install curses-2.2.1+utf8-cp37-cp...

cuicui_ruirui的博客 1380

叶绿体基因组提交NCBI全流程避坑指南

叶绿体基因组作为环状细胞器DNA,其数据提交并非简单上传,而是需严格遵循INSDC标准的学术出版行为。其核心原理在于元数据完整性、拓扑结构语义一致性与分类学路径精确匹配;技术价值体现在保障序列可追溯、可复现、可互操作;典型应用场景涵盖植物系统发育、条形码开发及合成生物学底盘构建。实践中,FASTA头行格式、feature table嵌套规则、taxid绑定及BankIt静默校验等环节极易引发失败。本文聚焦NCBI|叶绿体基因组数据上传中的高频报错与隐性约束,提供面向生物信息工程师的实操级规范解析。

weixin_31960565的博客 326

密码学:一文看懂Base64算法

Base64常常在我们开发中出现,我们可能只知道它是一串乱码(看不懂的符号),知道有时候知道我们需要把一些数据进行base64编码,有时候需要进行Base64解码。但是却不知道它的作用是什么?它存在的意义是什么?还有它是如何生成的?如何编码和解码?上述的疑问相信在你读完本篇文章之后烟消云散。下面开始正文。Base64是什么?它和加密解密操作有什么关系吗?没错,这就是经过Base64编码后的字符串。对它解码后,我们获得以下内容点个关注,是对我持续创作的最大的鼓励!

Shujie 1万+

curses函数库简介及使用

curses函数库主要用来实现对屏幕和光标的操作,它的功能定位处于简单文本行程序和完全图形化界面之间,在目前图形化界面已经蓬勃发展的现在可能显得有些过时,但是其中很多实现思想和操作仍然值得学习和借鉴,并且curses目前仍然是linux图形化编程的选择之一

C_eeking的博客 2442

YOLOv11改进 ,YOLOv11改进主干网络为MobileNetV3,助力涨点

MobileNetV3通过结合硬件感知网络架构搜索(NAS)和NetAdapt算法,通过新颖的架构改进进一步提升了性能。本文开始探讨了自动化搜索算法与网络设计如何协同工作,以利用互补方法来提升整体技术水平。通过这一过程,创建了两个新的MobileNet模型:MobileNetV3-Large和MobileNetV3-Small,分别针对高资源和低资源使用场景。这些模型随后被适配并应用于目标检测和语义分割任务。

在职AI算法工程师,擅长计算机视觉,YOLO目标检测、分割等,擅长web、pyqt界面可视化,好内容持续更新中,来这里跟大家一起学习,共同进步 1936

linux 下 curses库 安装 和使用

curses库是一组函数,程序员可以用它们来设置光标的位置和终端屏幕上显示的字符样式。curses库最初是由UCB的开发小组开发的。大部分控制终端屏幕的程序使用curses。曾经由一组简单的函数组成的库现在包括了许多复杂的特性。 Ubuntu下安装方法: sudo apt-get install libncurses5-dev  (如果发现找不到这个包,使用命令 sudo apt-ge...

iteye_6369的博客 1062

Microsemi Libero使用技巧11——CoreUARTAPB RX管脚分配时不显示

调用串口IP核CoreUARTAPB,并例化到顶层设计,发现UART_RX管脚在进行管脚分配时没有显示出来,最后发现是CoreAPB3总线IP核配置不对导致,改为如下配置后正常。

whik1194的博客 758

71、CAN总线双绞线绞距与抗共模干扰的定量关系

摘要:本文探讨了CAN总线双绞线绞距与抗共模干扰的定量关系。通过理论推导得出共模电压与绞距平方成正比,绞距越小抑制效果越好。工程实践表明,工业现场推荐绞距不超过30mm,高频干扰场景需优先优化绞距。实测数据验证了绞距均匀性的重要性,建议控制在15-25mm范围,安装时保持绞合结构完整。案例显示,将绞距从50mm改为15mm后,共模干扰从12V降至1.8V,有效解决了CAN通信问题。绞距选择需兼顾理论计算与现场实测,同时注意与屏蔽层的协同设计。

2401_88858637的博客 186

linux下python curses 包用法解析

用法:终端的界面绘图和键盘响应库 import Curses stdscr = curses.initscr()#产生一个对象 curses.noecho()#关闭回现 curses.cbreak()#关闭缓冲 curses.cbreak(True)#响应多字节键如 Home等 #相对应的结束方法 curses.nocbreak() stdscr.keypad(False) curses.echo...

YZBPXX 582

uniapp 如何封装实现任意页面都能使用的全局弹窗

项目内容场景全局监听消息提示难点uniapp 无法全局挂载组件解决方案动态创建 DOM + 动态 Vue 实例优势跨页面 / 不依赖页面组件树 / 灵活调用如果你使用的是小程序平台,DOM 操作可能受限,需要用或方式兼容处理。想支持多个弹窗堆叠?你可以扩展,加个弹窗队列管理器。

代码简单说 Vue、JAVA、PHP、Node.js 熟练运用,接口、架构、性能全搞定。 944

linux curses库用法链接

http://www.cnblogs.com/dandingyy/archive/2012/08/23/2651644.html

Welcome to Niki_Cao's Small World 393

基于ESP32的智能车载环境监测系统开发

随着智能汽车技术的飞速发展,车载系统的功能越来越多样化,除了基本的行驶控制和娱乐功能外,车载环境监测系统也成为了一项重要的功能。通过实时监测车内环境数据,例如温度、湿度、空气质量、气体浓度等,智能车载环境监测系统能够提供更为舒适和安全的驾驶体验,同时增强车辆的智能化程度,提升用户的整体体验。ESP32作为一种集成了Wi-Fi和蓝牙功能的高效能低功耗嵌入式开发平台,成为了设计车载环境监测系统的理想选择。它不仅具备丰富的接口和处理能力,还能够实现与云平台、手机应用等系统的远程数据传输和控制。

2201_76125393的博客 715

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

getch 函数 当ubuntu下没有curses.h下怎么办?

getch 功 能   在windows平台下从控制台无回显地取一个字符,在linux下是有回显的。 用 法   int getch(void);   在linux平台下时(即包含的是curses.h),还应该在使用函数之前使用initscr(),使用完毕之后调用endwin().否则的话不需输入就会返回。   #include   #include //linux 下

刘华世的博客 1695

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

getch函数的使用与说明

函数名:getch() 原型:int getch(void); 功能:在windows平台下从控制台无回显地取一个字符,在linux下是有回显的。在linux平台下时(即包含的是curses.h),还应该在使用函数之前使用initscr(),使用完毕之后调用endwin().否则的话不需输入就会返回。 返回值:从键盘读取的字符。 用法:常用作程序调试结束时,等待调试者按下任意键退出。

AnSwEr不是答案 4715

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

工作记录---linux下的C学习

一、工具的使用   1、学会使用vim/emacs,vim/emacs是linux下最常用的源码编辑具,不光要学会用它们编辑源码,还要学会用它们进行查找、定位、替换等。新手的话推荐使用vim,这也是我目前使用的文本编辑器。   2、学会makefile文件的编写规则,并结合使用工具aclocal、autoconf和automake生成makefile文件。   3、掌握gcc和gdb的基本用法。掌

程序狗的成长之路 563

新手学堂:Linux下C语言编程的注意事项

一、工具的使用   1、学会使用vim/emacs,vim/emacs是linux下最常用的源码编辑器,不光要学会用它们编辑源码,还要学会用它们进行查找、定位、替换等。新手的话推荐使用vim,这也是我目前使用的文本编辑器。   2、学会makefile文件的编写规则,并结合使用工具aclocal、autoconf和automake生成makefile文件。   3、掌握gcc...

weixin_33828101的博客 145

《Linux程序设计》学习笔记06——curses函数库

Normal 0 7.8 磅 0 2 false false false MicrosoftInternetExplorer4 <!-- /* S

2163

Linux curses库使用

 相信您在网路上一定用过如 tin,elm 等工具, 这些软体有项共同的特色, 即他们能利用上下左右等方向键来控制游标的位置. 除此之外, 这些程式的画面也较为美观. 对Programming 有兴趣的朋友一定对此感到好奇, 或许他能在 PC上用Turbo C轻易地写出相似的程式, 然而, 但当他将同样的程式一字不变地移到工作站上来编译时, 却出现一堆抓也抓不完的错误. 事实上, 原因非常ea...

weixin_34128501的博客 174

Linux下curses的安装和使用

本文讲解了curses的一些主要函数的功能及安装。

古先生的博客 3836

linux中curses

<br />相信您在网路上一定用过如 tin,elm 等工具, 这些软体有项共同的特色, 即他们能利用上下左右等方向键来控制游标的位置. 除此之外, 这些程式的画面也较为美观. 对Programming 有兴趣的朋友一定对此感到好奇, 也许他能在 PC上用Turbo C轻易地写出类似的程式, 然而, 但当他将相同的程式一字不变地移到工作站上来编译时, 却出现一堆抓也抓不完的错误. 其实, 原因很简单, 他使用的函式库可能在 UNIX 上是没有定义的. 有些在 Turbo-C 上被广泛使用的一些函式,

shi_869160的专栏 3041

在Linux安装curses

在Linux安装curses curses是一个在Linux/Unix下广泛应用的图形函数库,作用是可以在终端内绘制简单的图形用户界面。 安装 Ubuntu下安装方法: 在终端输入如下命令: sudo apt-get install libncurses5-dev (如果发现找不到这个包,使用命令 sudo apt-get update 更新下包源) 但这样安装的库是没有文档的,就是我们无法使用man命令查询curses库中函数的用法,为了方便查阅curses库中函数的用法,可以使用如下命令安装curs

pxypxy27的博客 1536

Linux curses库

    相信您在网路上一定用过如 tin,elm 等工具, 这些软体有项共同的特色, 即他们能利用上下左右等方向键来控制游标的位置. 除此之外, 这些程式的画面也较为美观. 对Programming 有兴趣的朋友一定对此感到好奇, 也许他能在 PC上用Turbo C轻易地写出类似的程式, 然而, 但当他将相同的程式一字不变地移到工作站上来编译时, 却出现一堆抓也抓不完的错误. 其实, 原因很简单,

代威涛的主页 1万+

linux 下curses库的安装和使用

curses库是一组函数,程序员可以用它们来设置光标的位置和终端屏幕上显示的字符样式。curses库最初是由UCB的开发小组开发的。大部分控制终端屏幕的程序使用curses。曾经由一组简单的函数组成的库现在包括了许多复杂的特性。Ubuntu下安装方法:sudo apt-get install libncurses5-devcurses的基本用法如下:1. 包含头文件:curses.h2. 编译时应加上链接语句-lcurses,如:gcc temp.c -o temp -lcurses3. 重要的函数:ini

zimohuakai的专栏 4533
上一篇: minGW安装教程
下一篇: C++ Primer Plus:第七章 - 函数——C++的编程模块
我是一片小树叶
博客等级 码龄11年 231粉丝 314原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值