效果展示
录屏2023
一、建立文件
mkdir ProgressBar //在当前目录下,建立新的目录 cd ProgressBar //进入这个目录 touch main.c makefile progressbar.c progressbar.h //在ProgressBar这个目录建立这几个文件
进入ProgressBar这个目录之后,使用ls命令查看是否创建成功
二、编写makefile文件
progressbar:progressbar.c main.c gcc -o $@ $^ .PHONY:clean clean: rm -f progressbar
三、源码
把源码复制粘贴到我们对应的文件中
1. 头文件.h
#include <stdio.h> #include <string.h> #include <unistd.h> #include <time.h> #include <stdlib.h> #define DOWNLOAD 1024*1024*1024 //1GB,下载的总大小 #define MAX 102 //str数组的长度 #define S '=' //数组的进度表示符号 void ProgressBar(); //函数声明
使用vim指令先打开头文件
vim progressbar.h
按小写i,进入插入模式(Insert),直接拷贝上去
再按esc,直接输入:wq(必须手动输入,这里不可以复制,而且必须有分号)
esc是让我们进入底行模式,按:wq是保存并退出,之后按同样的步骤完成下面几个文件的拷贝
2. 写函数定义的.c文件
#include "progressbar.h" char str[MAX] = "\0"; //这里要定义一个全局字符数组,防止每次调用这个函数都要开辟空间,销毁空间,影响效率 char *ch = ". "; // 这个字符串是为了表示下载一直在进行中,即使下载卡顿,也会转动,表示一直在下载;这里ch的字符串可以自己设定转动的字符,我这里设置的是.和空格,表示闪烁 int i = 0; // 全局变量i,控制表示下载进行中的转动速度 void Init(int p) //初始化进度条的内容,根据下载百分比来的,用图形表示当前的进度 { char *cur = str; for(int j = 0; j < p; j++) { str[j] = S; } } void ProgressBar(double percentage) //完成打印进度条的工作 { int len = strlen(ch); //len是ch字符串的长度,让ch这个字符串一直在循环输出 int p = (int)percentage; //这里强转一下percentage是因为,p是表示str数组的下标 if(percentage >= 100) //如果下载百分比达到100.或者是大于100,就让他是100,符合我们日常逻辑 percentage = 100; Init(p); //得知下载百分比之后,进入初始化str printf("[%-100s][%.2f%%][%c]\r", str, percentage, ch[i%len]); //这里就是打印进度条 fflush(stdout); //强制刷新缓冲区 i++; //让i不断增大 i %= len; //但是不能超过ch的长度 }
3. main函数的.c文件(函数调用的文件)
#include "progressbar.h" void DownLoad() { srand(time(NULL)^1023); //设置一个随机数,用来分配速度 int download = DOWNLOAD; //下载总量,可以自己设定 int alreadydown = 0; //已经下载的大小 double percentage = 0; //下载百分比 int v = 0; //下载速度 while(alreadydown < download) //循环条件就是我们下载量是否大于总大小 { usleep(100000); //休眠时间 v = rand()%(1024*1024*40); //从随机数赋值速度,%后面的数字,是为了不让这个速度超过这个数字 alreadydown += v; //每次下载累积 percentage = alreadydown*100.0 / download; //下载百分比*100,让我们更好查看,否则下完百分比是0.99,1.00等不好看 ProgressBar(percentage); //调用函数,这里函数主要完成打印进度条 } printf("\n安装完毕!\n"); } int main() { DownLoad(); return 0; }
四、运行
拷贝完成后,直接使用下面指令
make
然后ls一下,会看到有一个可执行程序生成
运行这个可执行程序
./progressbar
至此我们就可以看到进度条的生成了~
五、处理
如果想删除所有文件
rm -rf * cd .. rm -rf ProgressBar