在实现彩色彩色进度条的过程中,我们先来了解一下相关的知识,这样才能帮助我们更好的实现进度条。

一、相关背景

说起进度条,其实大家会常常见到,对没错,就是我们下载的时候显示百分比的东西,而我们在windows下看到的进度条都是经过精心设计过后得到的。同样的,在linux环境下我们也是需要这种东西的,但是在Linux的环境下我们只能用符号来代替进度条来进行实现,在Linux下安装文件都会有一个进度条来提示我们安装的进度,它里面会动态增长的一个图像表示进度,同时还有百分数表示安装百分比等等信息。

二、缓冲区的相关知识

一般C库函数写入文件是全缓冲方式,而写入显示器是行缓冲方式,printf、fwrite库函数会自带缓冲区,而我们只要达到了一种缓冲方式我们就可以刷新缓冲区,一般情况下我们有以下缓冲方式:

  • 行缓冲:一行的末尾只要有‘\n’我们即可刷新缓冲区。
  • 全缓冲:把缓冲区写满,立刻刷新缓冲区。
  • 无缓冲:系统调用无缓冲区函数。

如果我们没有遇到回车换行符,缓冲区不会立刻将数据显示出来,而是进入sleep函数中,实际上最新执行的仍然是sleep之前的程序,因为没有\n出现,所以数据先会被放在缓冲区中,所以我们需要用fflush强制刷新缓冲区。

三、颜色的实现

颜色的实现很简单我们只需要在需要显示颜色的部分输入颜色的编号即可,但是最重要的是我们需要在最后用\033[0m关闭所有属性,不然程序运行后会在运行后的后续文字中也变为你所设置的颜色,但是如果用ls命令,你会发现颜色由恢复原来的样子,因为ls命令有内置的\033[0m代码来关闭所以属性。

颜色的实现主要通过控制符来进行实现,常见的控制符如下所示:

控制码 含义
\033[0m 关闭所有属性
\033[1m 设置高亮度
\033[4m 下划线
\033[5m 闪烁
\033[7m 反显
\033[8m 消隐
\033[30m– \033[37m 设置前景色
\033[40m– \033[47m 设置背景色
\033[nA 光标上移n行
\033[nB 光标下移n行
\033[nC 光标右移n列
\033[nD 光标左移n列
\033[y; H 设置光标位置
\033[2J 清屏
\033[K 清除从光标到行尾的内容
\033[s 保存光标位置
\033[u 恢复光标位置
\033[? 25l 隐藏光标
\033[? 25h

显示光

显示光标

前背景色的代码

代码 含义
30 黑色
31 红色
32 绿色
33 黄色
34 蓝色
35 紫色
36 深绿色
37 白色

背景色的代码

代码 含义
40 黑色
41 深红色
42 绿色
43 黄色
44 蓝色
45 紫色
46 深绿色
47 白色

四、\r和\n的区别

\r表示的是回车,是光标回到最开始的位置,而\n表示的是换行,换到下一行,光标回到下一行最开始的位置,在实现进度条的过程中,需要的是\r。

五、代码的实现

用一区间存放#号图像,由于我们用数组存放’#’号,从0到100一共有101个,但是还需要在最后加上一个’\0’表示结束,所以一共有102个空间,同时如果我们要实现一个旋转的圈圈所以包含了“|/-\”四个字符,所以还需要一个数组存放这些字符。

我们用一个while()里面输出这些信息即可完成进度条的实现,但是需要注意的是,我们需要的是行缓冲模式,所以我们在printf的最后加上\r表达换行,如果不加上这个则不会刷新,每次都输出一行,最后我们用fflush强制输出缓冲区的内容即可达到目的。

由于在Linux下usleep是按照毫秒计算的,这点和windows下不一样,所以我们定下了10000的数值。

函数名: usleep
 头文件: #include
 功  能: usleep功能把进程挂起一段时间, 单位是微秒(百万分之一秒);
 语  法: void usleep(int micro_seconds);
 返回值: 无
 内容说明:本函数可暂时使程序停止执行。参数 micro_seconds 为要暂停的微秒数(us)。
 注 意:
 这个函数不能工作在windows 操作系统中。用在Linux的测试环境下面。
 参 见:usleep() 与sleep()类似,用于延迟挂起进程。进程被挂起放到reday queue。
 是一般情况下,延迟时间数量级是秒的时候,尽可能使用sleep()函数。
 如果延迟时间为几十毫秒(1ms = 1000us),或者更小,尽可能使用usleep()函数。这样才能最佳的利用CPU时间
 时钟换算:
 微秒,时间单位,符号us(英语:microsecond ).
 1微秒等于百万分之一秒(10的负6 次方秒)
 0.000 001 微秒 = 1皮秒
 0.001 微秒 = 1纳秒
 1,000 微秒 = 1毫秒
 1,000,000 微秒 = 1秒
 1s = 1000ms
 1ms = 1000μs
 1μs = 1000ns
 1ns = 1000ps

1秒(s) = 1000 毫秒(ms) = 1,000,000 微秒(μs) = 1,000,000,000 纳秒(ns) = 1,000,000,000,000 皮秒(ps)

memset()函数

原型是extern void *memset(void *buffer, int c, int count) ; buffer:为指针或是数组,c:是赋给buffer的值,count:是buffer的长度.

这个函数在socket中多用于清空数组.如:原型是memset(buffer, 0, sizeof(buffer))Memset 用来对一段内存空间全部设置为某个字符,一般用在对定义的字符串进行初始化为‘ ’或‘/0’;

例:char a[100];memset(a, '/0', sizeof(a));memset可以方便的清空一个结构类型的变量或数组。

六、代码实现过程

Linux小程序——彩色进度条相关推荐

  1. 详解在Linux下实现(彩色)进度条程序,并通过makefile进行编译.

    彩色进度条的实现与makefile编译: 创建一个process文件,在里面编写实现进度条的代码    1.在编写代码的时候我们首先要区分两个转义字符:\n \r \n:表示换行,换到下一行,并位于起 ...

  2. 《Linux小项目-倒计时+进度条》

    本文主要讲解在linux系统下实现进度条以及倒计时小程序 文章目录 成果展示 1.`\r和\n` 理解字符含义: 测试字符 (1)`\r和\n`都存在 (2)`\r和\n`都不存在 (3) `只有\n ...

  3. 微信小程序 环形进度条_微信小程序实现圆形进度条实例分享

    本文主要和大家分享微信小程序实现圆形进度条实例,希望能帮助到大家. 小程序中使用圆形倒计时,效果图: 思路使用2个canvas 一个是背景圆环,一个是彩色圆环. 使用setInterval 让彩色圆环 ...

  4. uniapp 自定义进度条_如何解决uniapp小程序下载进度条问题

    最新在做下载点击下载类型小程序,主要用到小程序progress滚动条,用于显示下载进度 但是,博主在做小程序的时候发现滚动条一开始一直从0开始赋值,然后滚动条就一直抖动闪动. 看看下载进度数据打印,也 ...

  5. 微信小程序 环形进度条_微信小程序实现圆形进度条动画

    本文实例为大家分享了微信小程序动画之圆形进度条,供大家参考,具体内容如下 上图: 代码: js: //获取应用实例 var app = getApp() var interval; var varNa ...

  6. 微信小程序 环形进度条_Web微信小程序圆环形进度条组件CSS实现

    首先理解小程序的自定义组件. 原理 看了网上的一些教程,实现圆环用的是两个半圆的旋转,通过overflow: hidden来控制的. 首先绘制底层容器,一个正方形,通过圆角变圆,用来作为未读进度的圆环 ...

  7. LInux:shell 彩色进度条实现(有图有代码有真相!!!)

    一.进度条原理(以前的博客详细讲述过):http://blog.csdn.net/sharp_up/article/details/55506555 二.颜色设置 // 字体颜范围(前景颜色):30~ ...

  8. 微信小程序 27 进度条的动态实现和搜索框、热搜榜的静态搭建

    27.1 进度条的动态实现 // 音乐管理者实时播放的进度appInstance.globalData.backgroundAudioManager.onTimeUpdate(() => {le ...

  9. 微信小程序进度条样式_微信小程序—progress(进度条)

    设置进度条颜色(请使用十六进制颜色值,例如:#ff00ff) 未选择的进度条的颜色(请使用十六进制颜色值,例如:#ff00ff) 设置/取消进度条从左往右的动画 设置/取消进度条右侧显示百分比 //获 ...

  10. 微信小程序 - 答题进度条

    关于进度条的话,我是使用官方原生的progress的. 关于进度progress接受保留2位小数(从后端获取到平均值,再item循环出来) js wxml

最新文章

  1. 财务大数据比赛有python吗-如何在一个月之内掌握python数据分析,参加大数据比赛?...
  2. java 实例变量初始化_java学习之实例变量初始化
  3. webpack-dev-server 和webpack-hot-middleware
  4. 项目如何用jetty运行_阿里大牛教你如何用Dubbox+SpringBoot+Docker架构,实现双11项目...
  5. Backbone源码分析-Backbone架构+流程图
  6. orika 映射非空字段_Orika:将JAXB对象映射到业务/域对象
  7. dw1000信标码_DW1000方案工牌型UWB标签,助力10厘米高精度室内定位!
  8. java 流式_Java开发笔记(七十二)Java8新增的流式处理
  9. c语言编程命令,C语言编程命令
  10. Ubuntu gerrit 安装配置
  11. 坚果云android功能,坚果云发布Android新版本 离线收藏大增强
  12. 京东Cookie抓取
  13. “讯飞杯”合肥市第三十届青少年信息学奥林匹克竞赛(小学组)试题
  14. 【Shell】测试脚本
  15. java是什么?用来做什么的?
  16. -Dmaven.multiModuleProjectDirectory system property is not set. Check $M2_HOME e
  17. 段码液晶屏笔段电压范围_LCD段码(笔段)液晶显示屏和点阵液晶显示屏
  18. 数领科技|主流BIM软件及公司介绍
  19. 淘宝新店如何推广效果比较好?有哪些渠道?
  20. stm32引脚速度GPIO_Speed的区别

热门文章

  1. python sklearn PR曲线 AUPR值
  2. webpack5css抽离和压缩
  3. 数据库中COMMENT关键字的使用
  4. linux openerp,openerp
  5. 【C语言】球从100米自由落下,每次落地后反跳回原高度的一半。当10次落地时,共经过多少米,第10次反弹多高。
  6. AppCompatActivity设置透明主题
  7. 掌上军营服务器信息,智慧军营之视频监控系统
  8. 感知机为什么不能表示“异或”?
  9. 华为HMS:风雨突然,仍求自我
  10. 网站设计65条原则 作者:小柯