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

【make/Makefile】Linux下进度条的设计与实现

一、简单介绍make/Makefile

Makefile 和 makefile 不区分大小写,但是一定只能是 “makefile” !!!

make 是一个指令,makefile 是一个文件

Makefile 格式形式:

  • 使用 make 生成目标文件时,默认从上到下扫描 Makefile 文件,默认形成的是第一个目标文件——默认只生成一个

二、进度条的设计与实现

进度条应与实际的业务结合,单独存在没有意义。因此,下面模拟了一个下载场景,结合下载场景完成进度条的设计。

【Makefile 文件】
processbar:test.o processbar.o
	gcc -o $@ $^
test.o:test.c
	gcc -c test.c
processbar.o:processbar.c
	gcc -c processbar.c

.PHONY:clean
clean:
	rm -f processbar test.o processbar.o            
【processbar.h】
  1 #include <stdio.h>
  2 #include <string.h>
  3 #include <unistd.h>
  4 #include <stdlib.h>
  5 #include <time.h>
  6 
  7 
  8 #define MAX 103
  9 
 10 #define Head '>'
 11 #define Body '='
 12 
 13 void process_fflush(double rate);  
【processbar.c】
  1 #include "processbar.h"
  2 
  3                                                                   
  4 char* spit = "-\\|/";
  5                      
  6 char buff[MAX] = {0};           
  7 void process_fflush(double rate)
  8 {                                  
  9     static int cnt = 0;  
 10     int n = strlen(spit);                                     
 11     if (rate < 0.5) buff[0] = Head;
 12                                                               
 13     printf("[%-100s][%.1f%%][%c]\r", buff, rate, spit[cnt%n]);
 14     fflush(stdout);        
 15     buff[(int)rate] = Body;                        
 16     if ((int)rate < 99) buff[(int)rate + 1] = Head;
 17                                     
 18     cnt++;
 19                                     
 20     if (rate >= 100.0) printf("\n");
 21 }
【test.c】
  1 #include "processbar.h"
  2 
  3 #define FILE_SIZE 1024*1024*1024
  4 
  5 void download()
  6 {
  7     int total = FILE_SIZE;
  8     srand(time(NULL)^1023);
  9     while (total)
 10     {
 11         usleep(20000);
 12         int one = rand()%(2 * 1024 * 1024);
 13         total -= one;
 14         if (total < 0)
 15             total = 0;
 16         
 17         int download = FILE_SIZE - total;
 18         double rate = (download * 1.0 / (FILE_SIZE)) *100;
 19         process_fflush(rate);
 20     }
 21 }
 22 
 23 int main()
 24 {
 25     download();
 26     return 0;
 27 }  

相关文章:

  • 2-高可用-负载均衡、反向代理
  • Apache Tomcat httpoxy 安全漏洞 CVE-2016-5388 已亲自复现
  • Axure中继器的使用实现表格的增删改查的自定义文件
  • LVS负载均衡器(DR模式)+nginx七层代理+tomcat多实例+php+mysql 实现负载均衡以及动静分离、数据库的调用!!!
  • Rabbitmq 死信取消超时订单
  • olap/clickhouse-编译器优化与向量化
  • 数据结构学习 Leetcode300最长递增子序列
  • YOLOv8改进 | 2023注意力篇 | HAttention(HAT)超分辨率重建助力小目标检测 (全网首发)
  • XXE漏洞 [NCTF2019]Fake XML cookbook1
  • SQL Server 安装教程
  • MySQL——表的增删查改
  • 软件设计模式:UML类图
  • 概率论复习
  • 竞赛保研 python的搜索引擎系统设计与实现
  • 基于YOLOv8的草莓病害检测,加入EMA注意力和GPFN提升病害检测能力
  • [Ray Tracing in One Weekend] 笔记
  • Golang(壹)
  • OpenHarmony开发环境快速搭建(无需命令行)
  • LeetCode 每日一题 Day 17 || 二分
  • Flink系列之:SQL提示
  • 马上评丨全民定制公交,打开城市出行想象空间
  • 【社论】职业上新,勇于“尝新”
  • 明星同款撕拉片,为何能炒到三四百一张?
  • “80后”计算机专家唐金辉已任南京林业大学副校长
  • 纪录片《中国》原班人马打造,《船山先生》美学再升级
  • 以军总参谋长:已进入“决定性打击计划的第二阶段”