Linux-Linux下简易彩色进度条实现
2017-11-22 10:22
357 查看
在实现进度条之前,我们需要先简单了解一些知识:
一、缓冲区:
缓冲区分为无缓冲、行缓冲、全缓冲。
无缓冲:表示的是没有缓冲,可以将信息立马显现出来,典型代表是标准错误流stderr。行缓冲:表示的是输入输出遇到换行才执行真正的I/O操作。典型的代表是键盘的操作。
全缓冲:表示的是输入输出写满缓冲区才执行I/O操作。典型的代表是磁盘的读写。
所以我们在实现的时候需要每次输出完都需要使用fflush(stdout)将缓冲区刷新,以便下一次的输出。
二、’\r’和 ‘\n’的区别:
回车用’\r’表示,表示的是回到这行的起始位置。换行用‘\n’表示,表示的是换行到下一行。所以我们在实现的时候需要用的是’\r’,才能实现进度条的效果。三、如何彩色输出:
终端的字符颜色由转义序列控制,是文本模式下的系统显示功能,与具体语言无关。转义序列以控制字符’ESC’开头。多数转义序列超过两个字符,故通常以’ESC’和左括号’[‘开头。该起始序列称为控制序列引导符,通常由’\033[‘或’\e[‘代替。通过转义序列设置终端显示属性时,可采用以下格式:
\033[ Param {;Param;…}m 或 \e[ Param {;Param;…}m
其中,’\033[‘或’\e[‘引导转义序列,’m’表示设置属性并结束转义序列。Param为属性值,{…}表示可选(多个参数之间用分号隔开,与顺序无关)。
在实现中为了增加可读性可以我们可以将颜色定义为宏,再进行使用。
更详细了解请参考http://www.cnblogs.com/frydsh/p/4139922.html
注意:’\033[0m’用于恢复默认的终端输出属性,否则会影响后续的输出。
四、usleep()函数:
usleep()函数的功能是把调用该函数的线程挂起一段时间 , 单位是微秒(即百万分之一秒); 头文件: unistd.h 语法: void usleep(int micro_seconds); 在实现过程中我们可以调用usleep()函数来实现每0.1s刷新进度条的现象。代码实现如下:
#include <stdio.h> #include <unistd.h> #include <string.h> #define NONE "\e[0m" #define RED "\e[0;31m" #define BLUE "\e[0;34m" int main() { int index = 0; char str[21]; memset(str,'\0',sizeof(str)); char tmp[5] = {'-','\\','|','/','\0'}; while(index <=20) { str[index] = '#'; if(index <=10) printf(RED"%s[%d%%%c]\r"NONE,str,index*5,tmp[index%4]); else printf(BLUE"%s[%d%%%c]\r"NONE,str,index*5,tmp[index%4]); fflush(stdout); index++; usleep(100000); } printf("\n"); return 0; }
效果如下:
相关文章推荐
- Linux下实现简单进度条(彩色版)
- linux--shell脚本实现一个彩色进度条
- linux下实现简单的彩色进度条程序
- C语言实现彩色进度条---linux环境下编译
- 实现Linux彩色进度条
- Linux下实现一个简单进度条和shell脚本实现彩色进度条
- linux脚本编程之shell实现彩色进度条
- LInux:shell 彩色进度条实现(有图有代码有真相!!!)
- Linux下c实现简易进度条
- 在Linux下实现简易进度条
- 在Linux下实现一个彩色进度条(详)
- 在Linux下实现彩色进度条
- Linux下实现彩色进度条
- linux环境下使用vim实现简易进度条代码
- Linux | Linux下简易彩色进度条
- Linux - 实现简易进度条
- linux下实现彩色进度条
- LInux下实现简单的彩色进度条(Makefile版)
- 在Linux环境下实现打印彩色进度条
- linux :vim 实现命令行下输出进度条