0


【Linux】 Linux 小项目—— 进度条

进度条

基础知识

1 \r && \n

我们熟悉的

\n

实际上是两个操作 换行与回车

回车是将光标回到行开头
换行时将光标移到下一行

而“\r” 执行的是回车操作

我们可以看一下例子:

  1. 使用 “ \n ” 在这里插入图片描述 来看效果:

在这里插入图片描述

  1. 不使用“ \n ”在这里插入图片描述

来看效果:
在这里插入图片描述
为什么会产生这样的区别???
原因就在缓冲区

2 行缓冲区

缓冲区是内存空间的一部分。也就是说,在内存空间中预留了一定的存储空间,这些存储空间用来缓冲输入或输出的数据,这部分预留的空间就叫做缓冲区。缓冲区根据其对应的是输入设备还是输出设备,分为输入缓冲区和输出缓冲区。

“\n” 可以清空缓冲区 使内容出现在显示器是上
fflush()函数也可以完成类似功能。

3 函数介绍

  1. Sleep函数 Sleep函数可以使计算机程序(进程,任务或线程)进入休眠,使其在一段时间内处于非活动状态。注意在VC中Sleep中的第一个英文字符为大写的"S" 在标准C中是sleep(S不要大写),下面使用大写的来说明,具体用什么看你用什么编译器。简单的说VC用Sleep,别的一律使用sleep。其中,Sleep()里面的单位,是以毫秒为单位,所以如果想让函数滞留1秒的话,应该是Sleep(1000);另外还需要引用头文件 #include <windows.h>
  2. usleep()函数 usleep功能把进程挂起一段时间, 单位是微秒(百万分之一秒)注意需要引头文件 #include <unistd.h>个函数不能工作在windows 操作系统中。用在Linux的测试环境下面

进度条实现

版本 1

代码实现

progressbar.h

1 #include <stdio.h>2 #include<string.h>3 #include<unistd.h>45voidprogressbar();

progressbar.c

1 #include"progressbar.h"23 #define style '#'4 #define Length 10156voidprogressbar(){7char str[Length];8memset(str,'\0',sizeof(str));910int cnt =0;1112while(cnt<101){13printf("[%-100s][%3d%%]\r",str,cnt);14fflush(stdout);15     str[cnt++]= style;16usleep(20000);17}18printf("\n");1920}

main.c

1 #include"progressbar.h"23intmain(){4progressbar();5return0;6}

运行效果

在这里插入图片描述

版本2

显然 没有进度条会单独使用,一般都是搭配下载使用。
所以接下来我们来模拟一些下载过程:
progressbar.c

1 #include"progressbar.h"23 #define style '#'4 #define Length 10156voidprogressbar(double total,double current){7char str[Length];8memset(str,'\0',sizeof(str));910int cnt =0;11double rate =(current *100.0)/ total;12int loop =(int)rate;1314while(cnt <= loop){15     str[cnt++]= style;16}1718if(rate >=100){19printf("[%-100s][%0.1lf%%]\r",str,100.0);20}21else22printf("[%-100s][%0.1lf%%]\r",str,rate);2324fflush(stdout);2526}

main.c

1 #include"progressbar.h"23double bandwidth =1.0*1024*1024;45voiddownload(double total){67double current =0;8printf("Download Begin!\n");910while(current <= total){1112     current += bandwidth;13progressbar(total,current);14usleep(1000000);15}16printf("\ndownload done, filesize: %.1lf\n",total);17printf("\n");18}19intmain(){2021download(7.8*1024*1024);222324return0;25}

看看效果:
在这里插入图片描述
这下就非常类似我们的下载过程了!

Thanks♪(・ω・)ノ谢谢阅读!!!

下一篇文章见!!!

标签: linux 运维 服务器

本文转载自: https://blog.csdn.net/JLX_1/article/details/136129615
版权归原作者 叫我龙翔 所有, 如有侵权,请联系我们删除。

“【Linux】 Linux 小项目—— 进度条”的评论:

还没有评论