Linux下实现进度条并且彩色打印

Posted 菜鸟营小杰

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux下实现进度条并且彩色打印相关的知识,希望对你有一定的参考价值。

Linux下实现进度条并彩色打印

一、为什么要实现一个进度条?

  首先就是简单 ( ^_^ )

  其次就是理解以下几个知识点:

    1. \' \\r \' 与 \'  \\n \' 的区别

      先来看下什么是缓冲区:暂时存放输入输出信息的地方

      \\r:将要输入输出的信息会覆盖缓冲区原有的信息

      \\n:先进行输入输出信息,再换行,最后刷新缓冲区

    2. usleep函数

      作用:把调用该函数的线程挂起一段时间,单位是微秒

      头文件:#include <unistd.h>

      语法:void usleep( int micro_seconds );

      注意:这个语法不能工作在windows系统下,可以用在Linux测试环境下

    3.fflush()

      fflush():会强迫将缓冲区中的数据写入回参stream指定的文件中

      作用:清楚读写缓冲区中的内容

      原型:int flush(FILE* stream)

      了解:stdout-->C语言头文件中的一个宏,它展开到一个FILE*类型的表达式,表达式指向一个与标准输出流相关联的FILE对象;只是为了输出方便

  最后让我们实现一下简单进度条的代码

 

 1 #include <stdio.h>
 2 #include <unistd.h>
 3 #include <string.h>
 4 
 5 int main(){
 6 
 7   char bar[101];
 8   int i = 0;
 9   const char* p = "-/|\\\\";
10 
11   memset(bar, 0, sizeof(bar));
12 
13   while(i <= 100){
14 
15     printf("[%-100s][%d%%][%c]\\r",bar, i, *(p + (i % 4)));
16     fflush(stdout);
17     bar[i++] = \'#\';
18     usleep(100000); 
19   }
20 
21   printf("\\n");
22 
23   return 0;
24 }

 

 

 

二、如何实现彩色打印

  Linux下使printf()函数显示不同颜色

    颜色:
    #define NONE "\\033[0m" 
    #define RED "\\033[0;32;31m"
    #define LIGHT_RED "\\033[1;31m"
    #define GREEN "\\033[0;32;32m"
    #define LIGHT_GREEN "\\033[1;32m"
    #define BLUE "\\033[0;32;34m"
    #define LIGHT_BLUE "\\033[1;34m"
    #define DARY_GRAY "\\033[1;30m"
    #define CYAN "\\033[0;36m"
    #define LIGHT_CYAN "\\033[1;36m"
    #define PURPLE "\\033[0;35m"
    #define LIGHT_PURPLE "\\033[1;35m"
    #define BROWN "\\033[0;33m"
    #define YELLOW "\\033[1;33m"
    #define LIGHT_GRAY "\\033[0;37m"
    #define WHITE "\\033[1;37m"

  彩色进度条源代码

 

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

#define RED "\\033[0;32;31m""]"
#define NONE "\\033[0m""]"
#define GREEN "\\033[0;32;32m""]"
#define BLUE "\\033[0;32;34m""]"
#define YELLOW "\\033[1;33m""]"

int main(){
  char bar[101];
  int i = 0;
  const char* p = "-/|\\\\";
  memset(bar, 0, sizeof(bar));
  while(i <= 100){
    if(i % 4 == 0){
      printf(YELLOW);
    }else if(i % 4 == 1){
      printf(GREEN);
    }else if(i % 4 == 2){
      printf(BLUE);
    }else{
      printf(RED);
    }
    printf("[%-100s][%d%%][%c]\\r",bar, i, *(p + (i % 4)));
    fflush(stdout);
    bar[i++] = \'#\';
    usleep(100000); 
  }
  printf(NONE);
  printf("\\n");

  return 0;
}

 

  参考转载自:https://www.cnblogs.com/cuckoo-/p/10741562.html#top

 

以上是关于Linux下实现进度条并且彩色打印的主要内容,如果未能解决你的问题,请参考以下文章

终端打印彩色进度条

Python读取大文件时显示彩色进度条(rich)

linux下进度条的简单实现

Linux下的简易进度条的实现

Linux下的简易进度条的实现

活动到片段方法调用带有进度条的线程