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

简介: 【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 }  
相关文章
|
1月前
|
小程序 Linux 开发工具
【Linux】Linux 开发工具(vim、gcc/g++、make/Makefile)+【小程序:进度条】-- 详解
【Linux】Linux 开发工具(vim、gcc/g++、make/Makefile)+【小程序:进度条】-- 详解
|
14天前
|
小程序 Linux C语言
Linux小程序 —— 进度条
Linux小程序 —— 进度条
21 6
|
14天前
|
Linux 开发工具 数据安全/隐私保护
Linux基础——Linux开发工具(下)_make/makefile
Linux基础——Linux开发工具(下)_make/makefile
19 1
|
3天前
|
NoSQL 编译器 Linux
【Linux】--- Linux编译器-gcc/g++、调试器-gdb、项目自动化构建工具-make/Makefile 使用
【Linux】--- Linux编译器-gcc/g++、调试器-gdb、项目自动化构建工具-make/Makefile 使用
8 0
|
22天前
|
Linux Shell C++
linux C/C++ makefile
linux C/C++ makefile
|
1天前
|
监控 Linux 应用服务中间件
探索Linux中的`ps`命令:进程监控与分析的利器
探索Linux中的`ps`命令:进程监控与分析的利器
|
23小时前
|
IDE Linux 数据处理
探索Linux中的`pydoc`命令:Python文档生成器的力量
`pydoc`是Linux上Python的文档生成和查看工具,尤其对数据科学家有价值。它从docstring生成模块、函数和类的文档,提供快速API参考。主要特点包括易用性、支持标准库和第三方库、跨平台。命令行示例:`pydoc pandas` 查看库文档,`pydoc numpy.array` 查看类详情,`pydoc -k 关键字` 进行搜索。使用时注意正确安装Python,编写清晰的docstring,并结合IDE以提升效率。
|
22小时前
|
存储 安全 Linux
深入解析Linux的`read`命令
`read`命令在Linux shell中用于从标准输入读取数据并赋值给变量。它可以用于交互式脚本,提供用户输入或读文件。关键选项包括`-p`(提示用户)、`-r`(禁用转义)、`-s`(静默模式,适合密码)、`-t`(超时)和`-n`(读取特定字符数)。示例包括基本输入、带提示的密码输入和设置超时的输入。注意安全处理密码和验证用户输入。
|
22小时前
|
存储 Linux 数据处理
Linux中的raw命令:深入解析与实用指南
Linux的`raw`命令详解:用于直接访问硬件设备,绕过文件系统,提供高灵活性和性能。适用于数据处理,如直接复制文件或设备数据。使用时需谨慎,注意设备理解、数据备份及正确选项选择。结合其他工具可实现更多功能。示例:`raw file1 file2`复制文件,`raw -s 1024 file1 file2`跳过字节复制。