当前位置: 首页 > backend >正文

Linux --进度条小程序更新

这里使用随机数来模拟下载量,来实现一个下载进度更新的小程序

main.c 的代码,其中downlod这个函数使用的是函数指针,如果有多个进度条函数可以传入进行多样化的格式下载显示,还需要传入一个下载总量,每次"下载以后刷新一次进度条",具体实现如下。

#include<stdio.h>
#include<stdlib.h>
#include"process.h"
#include<time.h>const int base=100;
double total1 =2048.0;
double total2 =500.0;
double once =0.5;
typedef void (*flush_t)(double current,double total);void downlod(flush_t f,double total)
{double current=0.0;double speed=0.0;while(current <= total){int n = rand() % base + 1 ;speed=n * once;current+=speed;if(current>total){current=total;process(current,total);usleep(100000);break;}f(current,total);usleep(100000);}printf("\n");
}int main()
{srand(time(NULL));downlod(process,total1);downlod(process,total2);return 0;
}

process.c的实现与上一篇文章的方法类似,只是更改了一个下载样式 ' . ',lable使用一个数组来储存,其中点的个数由静态变量n控制,在第一个循环中当i等于NUM大小时会将最后一个字符设置为'\0',否则在打印的时候会出现“烫烫烫”等字符,这是因为字符串以'\0'作为结束标志。此次代码根据真实的应用场景,进行动态刷新,由percent控制'#'的数量。最后在打印进度条时还添加了当前下载量和总的下载量,下载完成时状态栏会显示Finish,具体实现如下。

#include"process.h"
#include<string.h>#define NUM 100
#define STYLE '='
#define POINT '.'
#define PUM 7void process(double current, double total)
{char bar[NUM/2+2];memset(bar , '\0' , sizeof(bar));int percent=(int)(current / total * 100);int i = 0;for(i = 0; i <=percent; i++){if(i % 2  == 0){bar[i/2]=STYLE;bar[i/2+1]='>';}if(i == NUM)bar[i/2+1]='\0';}char lable[PUM];static int n= 0;n++;n %= PUM;memset(lable,'\0',PUM);for(i = 0; i < PUM; i++){if (i < n )lable[i]=POINT;else lable[i]=' ';if(i == PUM-1)lable[i]='\0'; }if(percent==100){printf("已下载量: %-6.1f mb 总下载量: %-6.1f mb[%-51s][%3d%%][Finish]\r",current,total,bar,percent); }else{printf("已下载量: %-6.1f mb 总下载量: %-6.1f mb[%-51s][%3d%%][%-6s]\r",current,total,bar,percent,lable);}fflush(stdout);
}

代码运行效果图:

http://www.xdnf.cn/news/9201.html

相关文章:

  • 深度解析:如何利用 Docker 容器化 Python 应用,并解决容器间的网络与存储问题
  • 嵌入式高级工程师面试全解:从 malloc 到 kernel panic 的系统知识梳理
  • JSON解析性能优化全攻略:协程调度器选择与线程池饥饿解决方案
  • 相交链表(力扣160 easy)
  • 蓝凌EKP平台表单控件升级:一行配置引入LayUI新UI体验
  • React useEffect和useEffectLa
  • 从核心数据透视吹风机行业:用户需求演变与产品创新图谱
  • Redis 集合、有序集合与通用命令详解
  • 实验设计与分析(第6版,Montgomery)第3章单因子实验:方差分析3.11思考题3.6 R语言解题
  • HTML5 全面知识点总结
  • Point-wise vs Pair-wise vs List-wise 简述
  • 系统开发和运行知识
  • 什么场景下能够用到根据id批量查询用户
  • sockaddr_in
  • 08_预处理与缩放
  • 关于 smali:1. Smali 基础语法入门
  • 一款不错的嵌入式开发自动化测试平台
  • Trivy 镜像漏洞扫描:从零入门到实战指南
  • java基础(面向对象进阶高级)泛型(API一)
  • 智能AI之常用协议普及
  • HarmonyOS优化应用文件上传下载慢问题性能优化
  • CMU-15445(5)——PROJECT#1-BufferPoolManager-Task#3
  • kali切换为中文
  • 输入一串字符,统计其中字母的个数
  • Python5.26打卡(day27)
  • 【SQL server】 SQL子查询:与连接的区别、类型划分、相关与非相关子查询对比
  • YOLOv12增加map75指标
  • [QMT量化交易小白入门]-五十七、ETF历史行情分钟线下载
  • 25盘古石初赛wp(部分)
  • Java----自动装箱和自动拆包 与 泛型