Linux下彩色进度条的实现
来源:互联网 发布:资料整理软件 编辑:程序博客网 时间:2024/05/21 19:36
在Linux下安装软件的过程中会出现一个进度条,它通过动态增加一些符号来表示安装进度。今天我们就来模拟实现一下一个进度条。
在实现进度条之前,首先需要了解一些概念。
一.缓冲区
缓冲区分为三种:无缓冲,行缓冲和全缓冲。
无缓冲:指没有缓冲,立即显示信息。
行缓冲:输入输出遇到换行符才进行IO操作。
全缓冲:输入输出写满缓冲区才进行IO操作。
我们在实现一个进度条的时候,如果每次输出符号的时候不刷新缓冲区,就不会立即输出符号,而是进入sleep函数,这样的效果就不好了。所以在每次输出完的时候,都需要用fflush(stdout)刷新缓冲区,以便执行下一次的输出。
二. “\r”和”\n”的区别
\r表示回车,表示回到这行的开始位置,\n表示换行,表示换到下一行的起始位置。我们在实现进度条的时候,希望进度条在一行中显示出来,而不是在多行显示出来,所以我们在这里需要用的是\r。
三.彩色的实现
终端的字符颜色的控制由转义字符实现。通过转义序列显示终端的颜色通常以“\033[”开头,以m来表示转义序列结束。但最重要的是我们在输出完之后要用“\033[0m”来关闭所有属性,否则之后的输出也会变成所设置的颜色。下面只列出本次代码所用到的转义属性。
\033[0m ——>关闭所有属性
\033[34m ——>设置前景色为蓝色(30-37为前景色)
四.具体实现方法
这里我们用“#”来作为进度条加载的符号,一般来说加载的过程都是从0%到100%,所以我们需要有101个空间来存放0-100个“#”,再加上末尾的\0结束标志,总共是102个空间,我们定义一个字符数组bar[102]来存放我们的标记。我们还可以再末尾用一串旋转看起来动态旋转的字符串“|-/”来让这个过程更具有动感。当然了,我们还需要一个时间间隔来控制每次输出的时间。sleep的单位是s,usleep的单位是微秒(百万分之一秒),为了更快的实现,这里我们使用usleep(100000),表示每0.1S输出一个字符。
下面附上代码
#include <stdio.h>#include <unistd.h>#include <string.h>int main(){ int n = 0; char bar[102]; const char* label="|\\-/"; memset(bar,0,sizeof(bar)); while(n <= 100) { printf("\033[34m[%-100s]\033[0m[%d%%][%c]\r",bar,n,label[n%4]); fflush(stdout); bar[n++]='#'; usleep(100000); } printf("\n"); return 0;}
- Linux下彩色进度条的实现
- Linux下彩色进度条的实现
- linux下实现彩色进度条
- LINUX-LINUX下简易彩色进度条实现
- LInux下实现简单的彩色进度条(Makefile版)
- Linux下彩色进度条的实现(printf的格式化输出成彩色的,在linux下才有效)
- 在Linux环境下实现打印彩色进度条
- C语言实现彩色进度条---linux环境下编译
- 【Linux】彩色进度条的实现,Linux小程序
- linux环境下实现进度条以及shell脚本实现彩色进度条
- Linux下实现一个简单进度条和shell脚本实现彩色进度条
- liunx下 采用shell实现彩色进度条
- linux--shell脚本实现一个彩色进度条
- Shell脚本下的彩色进度条
- shell下彩色进度条的编写
- 纯CSS3实现的彩色进度条
- shell脚本实现一个彩色的进度条
- shell脚本实现彩色进度条的编写
- [Office] 设置分散对齐
- 每个程序员都该知道的五大定律
- 程序员必须掌握的6种软技能
- 「Unity3D」(7)协程使用3种算法实现CameraShake震屏
- Linux┊理解devfs、sysfs、udev
- Linux下彩色进度条的实现
- [C#基础]c#中的BeginInvoke和EndEndInvoke
- hdoj 1020 Encoding (水题)
- 【4】Kotlin中使用RecyclerView
- cmd使用java -help可以看到关于agent参数
- 196算法的JavaScript实现
- Solr之集群管理Collection-yellowcong
- 求最大子数组之和的方法解析(2种可选)
- 如何编译免注册COM(reg-free COM)