【项目分享-知识讲解】 Linux第一个项目--进度条的实现与解析

📅 2026/8/24 12:58:57
【项目分享-知识讲解】 Linux第一个项目--进度条的实现与解析
目录前言Part1. 效果展示Part2. 效果分析Part3. 代码解析Part3.1. processbar.cPart3.2. main.cPart3.3. processbar.hPart4. 总结与反思Part5. 结语前言进度条相信大家都不陌生在下载资源的时候经常会见到所以我们也来模拟实现一下进度条的表现吧。lets go!!!!!!!!Part1. 效果展示Part2. 效果分析1:模拟实现下载完后的流程也就是显示下载完毕和下载了多少资源也可以显示速度。2:随着下载的进行显示符号表示下载进度。3:显示下载了多少资源以百分比的形式呈现。4: 用一根斜杠不断旋转表示下载的不断进行。也就是我们要用代码来实现各个模块。Part3. 代码解析Part3.1. processbar.c#define NUM 144 #define ch # #define speed 1 void processbar(int process) { static int cnt 0;//利用这个变量达到每次都能刷新斜杠的样子 达到旋转的效果 cnt % 4;//控制大小 不能越界 char buf[NUM 1];//将要打印的字符存在这里 memset(buf, 0, NUM 1);//全部置0 方便后续的printf终止 char fmt[64];//存储printf格式控制符 char lable[4] { |, /, -, \\ };//存储斜杠的不同样式 值得注意的是最后一个 由于\为转义字符 所以为了不让他将后面的单引号转义了 所以我们要先使用这个把他转义了 for (int i 0; i process; i) { buf[i] ch;//按照当前进度 填充数组 } sprintf(fmt, [%%-%ds][%%6.2f%%%%][%%c]\r, NUM);//利用sprintf制作fmt 值得注意的是当我们要保留%d不期望它是作为后面变量的类型引导时 我们要用两个%% printf(fmt, buf, process * 100 / (double)NUM, lable[cnt]);//打印进度 cnt;//改变下一次的斜杠 fflush(stdout);//强制刷新 防止打印不出来的情况发生 } void DownLoad() { double cur 0;//代表当前进度 while (cur NUM) { processbar(cur);//打印进度条 usleep(50000);//sleep 代表下载所需要的时间 cur speed;//进度 } printf(\ndownload done,all %d MB\n, NUM);//打印最终结果 }Part3.2. main.c#include processbar.h int main() { DownLoad();//代表多次下载 DownLoad(); DownLoad(); DownLoad(); DownLoad(); return 0; }Part3.3. processbar.h#pragma once #include stdio.h #include stdlib.h #include string.h #include unistd.h void processbar(int process); void DownLoad();Part4. 总结与反思这项目关键还是在于复习C语言的函数和规范我们的代码比如我们要常利用#define来定义我们过程中具有常数属性的变量避免魔法值遍地。还有就是在我们实现函数的时候我们要注意高内聚、低耦合这是我们项目可维护的关键。Part5. 结语这篇文章我们实现了下载中进度条项目接下来小编还会带来更多Linux相关的知识敬请期待~最后祝大家可以春风得意马蹄疾一日看尽长安花最后的最后要是觉得本文还可以的话可以点点赞关注小编一波谢谢大家~