linux—进度条彩色版简单实现

一、缓冲区理解:
1.无缓冲:将所得到的信息马上显示出来。
2.行缓冲:输入输出遇到换行才执行的I/O操作,比如键盘操作。
3.全缓冲:输入输出写满缓冲区蔡执行I/O操作。比如磁盘读写。
当我们在实现的时候需要使用fflush(stdout)来刷新缓冲区,以便下一次的输出。
二、fflush的理解:
1.对于输出流,fflush()强制写入给定输出或更新的所有用户空间缓冲数据。
2.对于输入流,fflush()丢弃任何缓冲数据。
这是从底层文件中获取的,但还没有被应用程序消耗掉。流的开放状态不受影响。
三、’\r’和’\n’的区别:
回车用’\r’表示,表示是回到改行的初始位置,换行用’\n’表示,表示直接换到下一行,所以我们需要用’\r’,以此达到进度条的效果。
四、颜色设定及扩展:
1.颜色设定:

    #define NONE  "\e[0m"                                                                                           
    #define RED   "\e[0;31m"                                                                                        
    #define BLUE  "\e[0;34m"                                                                                        
    #define GREEN "\e[0;32m"    

2.扩展:

编号 含义
40 黑色
41 深红色
42 绿色
43 黄色
44 蓝色
45 紫色
46 深绿色
47 白色
控制码 作用
\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 恢复光标位置

五、sleep和usleep简单介绍:
1,sleep:以秒为单位暂停读秒;
2.usleep:以毫秒为单位暂停读秒;
六、代码实现:

#include <stdio.h>
#include <unistd.h>
#include <string.h>

#define NONE  "\e[0m"
#define RED   "\e[0;31m"
#define GREEN "\e[0;32m"
#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 <=14)
            printf(RED"%s[%d%%%c]\r"NONE,str,index*5,tmp[index%4]);
        elseif(index<=14)
            printf(BLUE"%s[%d%%%c]\r"NONE,str,index*5,tmp[index%4]);
        else
            printf(GREEN"%s[%d%%%c]\r"NONE,str,index*5,tmp[index%4]);
        fflush(stdout);
        index++;
        usleep(100000);
    }   
    printf("\n");
    return 0;
}

七、效果展示:
https://img-blog.csdn.net/20180924123120989?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0MxMDI5MzIzMjM2/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70

猜你喜欢

转载自blog.csdn.net/C1029323236/article/details/82828154