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

linux小程序-进度条

文章目录

  • pro.h
  • pro.c
  • main.c
  • makefile
  • 测试

pro.h

#pragma once

#include <stdio.h>

typedef void(*callback_t)(double, double);

void probar(double total, double current);

pro.c

#include "pro.h"
#include <string.h>
#include <unistd.h>
#define Length 101
#define Style '='

const char *lable = "|/-\\";
void probar(double total, double current)
{
    char bar[Length];
    memset(bar, '\0', sizeof(bar));
    int len = strlen(lable);

    int cnt = 0;
    double rate = (current*100.0)/total;
    int loop_count = (int)rate;
    while(cnt <= loop_count)
    {
        bar[cnt++] = Style;
        //usleep(20000);
    }
    printf("[%-100s][%.1lf%%][%c]\r", bar, rate, lable[cnt%len]);
    fflush(stdout);
}

1.定义和初始化:
定义了一个长度为101的字符数组 bar 用于存储进度条。
使用 memset 将 bar 初始化为全零(\0),确保进度条初始为空。
定义了一个标签 lable(注意这里应该是 label,可能是个拼写错误),用于在进度条右侧显示一个动态变化的字符,以增加视觉效果。

2.计算进度:
计算当前进度的百分比 rate,即 current 除以 total 后乘以100。
将 rate 转换为整数 loop_count,表示进度条中应该有多少个字符被 Style(这里定义为 ‘=’)填充。

3.构建进度条:
使用 while 循环,将 bar 数组的前 loop_count 个位置填充为 Style。
注意,这里有一个潜在的改进点:如果 rate 是整数,则最后一个字符(如果有)将不会被更新为 lable 中的字符,因为 cnt 刚好等于 loop_count 时循环就结束了。

4.输出进度条:
使用 printf 格式化输出进度条,[%-100s] 确保进度条左对齐并填充空白以达到100个字符的宽度,[%.1lf%%] 显示进度百分比(保留一位小数),[%c] 显示 lable 中的一个动态变化的字符。
使用 \r 回车符,使得新的进度条会覆盖旧的进度条,从而实现动态更新的效果。
调用 fflush(stdout); 确保输出立即被刷新到屏幕上。

main.c

#include"pro.h"
#include<unistd.h>

double bandwidth=1024*1024*1.0;

void download(double filesize,callback_t cb)
{
        double current=0.0;

        printf("download begin,current:%lf\n",current);
        while(current<=filesize)
        {
                cb(filesize,current);
                usleep(100000);
                current+=bandwidth;
        }
        printf("\ndownload done,filesize:%lf\n",filesize);
}

int main()
{
        download(100*1024*1024,probar);
        return 0;
}

makefile

processbar:main.c pro.c
        gcc -o $@ $^
.PHONY:clean
clean:
        rm -f processbar

测试

在这里插入图片描述


http://www.kler.cn/a/286505.html

相关文章:

  • Leetcode:350
  • 如何监控ubuntu系统某个程序的运行状态,如果程序出现异常,对其自动重启。
  • 青少年编程与数学 02-008 Pyhon语言编程基础 07课题、数字
  • 网关登录校验
  • SQL UCASE() 函数详解
  • 从单体应用到微服务的迁移过程
  • 【iOS】如何制作苹果开发者证书、p12文件全流程(图文详情)
  • Python标准库学习之platform模块
  • macos USB外接键盘ctrl键绑定方法 解决外接USB键盘与mac键盘不一致问题
  • SpringSecurity Oauth2 - 密码认证获取访问令牌源码分析
  • gNB UE发送Timing AdvanceCommand
  • 新手如何学单片机
  • 续:MySQL的gtid模式
  • Nginx: TCP建立连接的优化和启用Fast Open功能
  • unicode编码存在转义字符,导致乱码问题的解决方案
  • 在gitignore忽略目录及该目录下的子文件
  • Guava Cache实现原理及最佳实践
  • 全国大学生数据建模比赛——深度学习
  • 网络工程师学习笔记——局域网和城域网
  • Linux之ip命令详解
  • 财富知识的认知(一)
  • 将单元格中的单引号隐藏,但是并不删除,用于从txt中复制到excel中直接将数字内容改为文本显示,刷新内容
  • kali——nikto的使用
  • VUE之Router命令行警告:Named Route ‘Home‘ has a default child route. 解决办法
  • HDMI显示器驱动设计与验证
  • NVIDIA Ada Lovelace 架构