【C】【Linux】利用C curses函数库进行终端彩色显示
以前,只有极少数的哑终端支持彩色显示功能,所以大多数早起的curses函数库都不支持色彩,现在,ncurses和其他大多数现代的curses实现版本都提供了对它的支持。但是遗憾的是,curses函数库的“哑屏幕”影响了其API,curses只能以一种非常受限的方式来使用彩色,这反映了早起彩色终端显示色彩能力的缺乏。
屏幕上的每个字符位置都可以从多种颜色中选择一种作为它的前景色或背景色。
curses函数库对颜色的支持有些与众不同,即字符颜色的定义及其景色的定义并不完全独立。你必须同事定义一个字符的前景色和背景色,我们将它称之为颜色组合。
在使用curses函数库的颜色功能之前,你必须检查当前终端是否支持彩色显示功能,然后对curses的颜色例程进行初始化,为完成这个任务,你需要使用两个函数:has_colors和start_color;
#include <curses.h>
bool has_colors(void);
int start_color(void);
如果终端支持彩色显示,has_colors函数将返回true。然后你需要调用start_color函数,如果该函数成功初始化了颜色显示功能,它将返回OK。
vi color.c
#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>
#include <curses.h>int main(){int i;initscr();if(!has_colors()){endwin();fprintf(stderr,"Error - no color support on this terminal \n");exit(1);} if(start_color() != OK){endwin();fprintf(stderr,"Error -could not initialize colors\n");exit(2);} clear();mvprintw(5,5,"There are %d COLORS, and %d COLOR_PAIRS available",COLORS,COLOR_PAIRS);refresh();init_pair(1,COLOR_RED,COLOR_BLACK);init_pair(2,COLOR_RED,COLOR_GREEN);init_pair(3,COLOR_GREEN,COLOR_RED);init_pair(4,COLOR_YELLOW,COLOR_BLUE);init_pair(5,COLOR_BLACK,COLOR_WHITE);init_pair(6,COLOR_MAGENTA,COLOR_BLUE);init_pair(7,COLOR_CYAN,COLOR_WHITE);for(i = 1;i <= 7;i++){attroff(A_BOLD);attrset(COLOR_PAIR(i));mvprintw(5 + i,5,"Color pair %d",i);attrset(COLOR_PAIR(i) | A_BOLD);mvprintw(5 + i,25,"Bold color pair %d",i);refresh();sleep(1);}endwin();exit(EXIT_SUCCESS);return 0;
}
[root@localhost color]# gcc color.c -o color -l ncurses
[root@localhost color]# ./color
结果如下
【C】【Linux】利用C curses函数库进行终端彩色显示相关推荐
- Linux下curses函数库的详细介绍
Linux下curses函数库的详细介绍 curses库介绍 安装 curses库函数介绍 初始化和重置函数 管理屏幕的函数 输出到屏幕 从屏幕读取 清除屏幕 移动光标 字符属性 管理键盘的函数 键盘 ...
- Shell Curses 函数库
用于 Shell 脚本的终端函数 "Shell Curses"是一个脚本函数库,这些函数为 Shell 程序员提供了将基于文本的光标移动到屏幕上指定位置的能力.这种能力允许使用 S ...
- curses函数库_Shell Curses函数库
Shell Curses成立于1993年,旨在解决需要一组可移植的游标操纵函数的特定问题,而不必为每个新平台都重新编译它们. 这些功能最初是用Bourne Shell编写的,此后已迁移到Korn Sh ...
- libnet编译linux,求助,libnet函数库的应用问题?出现 undefined reference to `libnet_init'错误。...
我在linux下已经安装了libnet函数库,可是在使用libnet_init()等函数的时候,用gcc编译总是显示 Undefined reference to "libnet_init& ...
- 利用Intel IPP函数库实现信号频谱计算
Intel IPP(Intel Integrated Performance Primitives)函数库是一套跨平台的软件函数库,它为用户提供了一套高效.实用的函数集,可用于实现通信.图像.语音等多 ...
- Linux 标准I/O函数库
标准I/O函数库: C标准库提供了文件的标准 I/O 函数库,相比前述的系统调用,主要差别是实现了跨平台的用户态缓冲的解决方案.标准I/O库使 用简单,与系统调用I/O相似,也包括打开.读写.关闭这些 ...
- Linux中Shell脚本函数库的笔记
Shell函数库的作用:函数库就是对一些十分常用的功能,独立出来,然后集中存放在一些独立的文件中,这些文件可以理解为函数库.函数库本质上也是函数,一般情况下函数库的函数建议使用下划线开头. 示例: c ...
- linux 流函数,标准IO函数库 - 二进制文件IO,流定位,创建临时文件和内存流
1 二进制IO(Binary IO) 在前一篇我们了解了逐字符读写和逐行读写函数. 如果我们在读写二进制文件,希望以此读写整个文件内容,这两个函数虽然可以实现,但是明显会很麻烦且多次循环明显效率很低. ...
- linux命令安装openssl函数库,ubuntu安装openssl库
Linux版本:ubuntu14.04 输入以下命令: sudo apt-get install openssl sudo apt-get install libssl-dev sudo apt-ge ...
最新文章
- Emoji表情符号录入MySQL数据库报错的解决方案
- Linux拷贝排除一个或多个目录的实现方法
- 微信小程序设置云函数使用的环境
- 字符串换行截取_textwrap 文本自动换行与填充
- apache启动失败_请检查相关配置.√mysql5.1已启动._1、Apache启动失败,请检查相关配置-百度经验...
- python wheel使用_【转载】Python,使用Wheel打包
- 最新 955 不加班公司名单
- System.getProperty(user.dir) 获取jar包所在目录
- 探讨:ASP.NET技术的学习顺序问题
- Fragment的使用
- 计算机专业英语课程内容,《计算机专业英语》课程教学大纲
- 从底层谈WebGIS 原理设计与实现(二):探究本质,WebGIS前端地图显示之地图比例尺换算原理...
- 怎样在线改图片大小?教你如何在线裁剪图片
- java中linechart用法_Line Chart
- PHP 下载保存文件到本地
- 使用Fiddler对手机App抓包
- 生僻字_tte_linux_ttf_提取字体_打印生僻字_uni
- 计算机锁屏之后QQ音乐停止播放了,win10在锁屏后怎样设置才能继续播放音乐
- 有关lua,luci的介绍
- Redis6简单安装
热门文章
- 差错控制(检错编码、纠错编码)
- 二等奖方案|2021 CCF BDCI个贷违约预测赛题@Faulty 队解题思路
- 透明网关配置修改后服务器要重启吗,透明网关配置修改后服务器要重启吗
- XSS专栏之常见xss--总结备忘
- 【吴恩达deeplearning.ai】2.7 Inception 网络
- SQL Server设置周一为每周第一天
- cocos和Unity3d 图集
- java 虚拟机设置 Xms Xmx PermSize MaxPermSize
- Flask session详细用法
- qt通过websocket和html通信,QT Websocket实现服务器客户端通讯(服务端部分)