欢迎来到代码驿站!

Linux

当前位置:首页 > 服务器 > Linux

Linux简易彩色进度条的实例代码

时间:2020-11-09 18:34:48|栏目:Linux|点击:

在实现进度条之前,我们需要先简单了解一些知识:

一、缓冲区:

缓冲区分为无缓冲、行缓冲、全缓冲。

无缓冲:表示的是没有缓冲,可以将信息立马显现出来,典型代表是标准错误流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为属性值,{…}表示可选(多个参数之间用分号隔开,与顺序无关)。

在实现中为了增加可读性可以我们可以将颜色定义为宏,再进行使用。

注意:'\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搭建Apache网站服务配置详解

栏    目:Linux

下一篇:Linux/Unix环境下的make命令详解

本文标题:Linux简易彩色进度条的实例代码

本文地址:http://www.codeinn.net/misctech/20816.html

推荐教程

广告投放 | 联系我们 | 版权申明

重要申明:本站所有的文章、图片、评论等,均由网友发表或上传并维护或收集自网络,属个人行为,与本站立场无关。

如果侵犯了您的权利,请与我们联系,我们将在24小时内进行处理、任何非本站因素导致的法律后果,本站均不负任何责任。

联系QQ:914707363 | 邮箱:codeinn#126.com(#换成@)

Copyright © 2020 代码驿站 版权所有