手把手教你如何在Linux下写进度条小程序(附源码)

这篇具有很好参考价值的文章主要介绍了手把手教你如何在Linux下写进度条小程序(附源码)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

效果展示

录屏2023

一、建立文件

mkdir ProgressBar   //在当前目录下,建立新的目录
cd ProgressBar      //进入这个目录
touch main.c  makefile  progressbar.c  progressbar.h //在ProgressBar这个目录建立这几个文件

进入ProgressBar这个目录之后,使用ls命令查看是否创建成功

手把手教你如何在Linux下写进度条小程序(附源码),Linux学习,linux,小程序,运维

二、编写makefile文件

编写makefile文件是为了,使用make命令构建我们的.c文件,生成可执行程序

progressbar:progressbar.c main.c
	gcc -o $@ $^

.PHONY:clean
clean:
	rm -f progressbar

三、源码

把源码复制粘贴到我们对应的文件中

1. 头文件.h

#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <time.h>
#include <stdlib.h>
#define DOWNLOAD 1024*1024*1024 //1GB,下载的总大小
#define MAX 102   //str数组的长度
#define S '='      //数组的进度表示符号
void ProgressBar();   //函数声明

使用vim指令先打开头文件

vim progressbar.h

按小写i,进入插入模式(Insert),直接拷贝上去

手把手教你如何在Linux下写进度条小程序(附源码),Linux学习,linux,小程序,运维

再按esc,直接输入:wq(必须手动输入,这里不可以复制,而且必须有分号)

esc是让我们进入底行模式,按:wq是保存并退出,之后按同样的步骤完成下面几个文件的拷贝

2. 写函数定义的.c文件

#include "progressbar.h"
char str[MAX] = "\0"; //这里要定义一个全局字符数组,防止每次调用这个函数都要开辟空间,销毁空间,影响效率
char *ch = ". ";      // 这个字符串是为了表示下载一直在进行中,即使下载卡顿,也会转动,表示一直在下载;这里ch的字符串可以自己设定转动的字符,我这里设置的是.和空格,表示闪烁
int i = 0;            // 全局变量i,控制表示下载进行中的转动速度
void Init(int p)      //初始化进度条的内容,根据下载百分比来的,用图形表示当前的进度
{
	char *cur = str;
	for(int j = 0; j < p; j++)
	{
		str[j] = S;
	}
}
void ProgressBar(double percentage) //完成打印进度条的工作
{
	int len = strlen(ch);     //len是ch字符串的长度,让ch这个字符串一直在循环输出
    int p = (int)percentage;   //这里强转一下percentage是因为,p是表示str数组的下标
	if(percentage >= 100)      //如果下载百分比达到100.或者是大于100,就让他是100,符合我们日常逻辑
		percentage = 100;
	Init(p);                   //得知下载百分比之后,进入初始化str
    printf("[%-100s][%.2f%%][%c]\r", str, percentage, ch[i%len]);   //这里就是打印进度条
    fflush(stdout); //强制刷新缓冲区
	i++;           //让i不断增大
	i %= len;        //但是不能超过ch的长度
}

3. main函数的.c文件(函数调用的文件)

#include "progressbar.h"
void DownLoad()
{
    srand(time(NULL)^1023);  //设置一个随机数,用来分配速度
    int download = DOWNLOAD; //下载总量,可以自己设定
    int alreadydown = 0;     //已经下载的大小
    double percentage = 0;   //下载百分比
    int v = 0;               //下载速度
    while(alreadydown < download) //循环条件就是我们下载量是否大于总大小
    {
        usleep(100000); //休眠时间
        v = rand()%(1024*1024*40); //从随机数赋值速度,%后面的数字,是为了不让这个速度超过这个数字
        alreadydown += v;          //每次下载累积
        percentage = alreadydown*100.0 / download; //下载百分比*100,让我们更好查看,否则下完百分比是0.99,1.00等不好看
        ProgressBar(percentage);  //调用函数,这里函数主要完成打印进度条
    }
    printf("\n安装完毕!\n");
}
int main()
{
    DownLoad();
    return 0;
}

四、运行

拷贝完成后,直接使用下面指令

make

然后ls一下,会看到有一个可执行程序生成

手把手教你如何在Linux下写进度条小程序(附源码),Linux学习,linux,小程序,运维

运行这个可执行程序

./progressbar

至此我们就可以看到进度条的生成了~

五、处理

如果想删除所有文件文章来源地址https://www.toymoban.com/news/detail-755994.html

rm -rf *
cd ..
rm -rf ProgressBar

到了这里,关于手把手教你如何在Linux下写进度条小程序(附源码)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 手把手教你 在linux上安装kafka

    目录 1. 准备服务器 2. 选一台服务器配置kafka安装包 2.1 下载安装包 2.2 解压安装包 2.3 修改配置文件 3. 分发安装包到其他机器 4. 修改每台机器的broker.id 5. 配置环境变量 6. 启停kafka服务 6.1 启动kafak服务 6.2 停止kafka服务                  1.买几台云服务器 或者 自

    2023年04月19日
    浏览(68)
  • 手把手教你Linux部署Nexus3私服

    对maven来说仓库分为两类:本地仓库和远程仓库,有三种专门的Maven仓库管理软件可以用来帮助我们建立私服:chiva、Artifactory和Nexus。Nexus是当前最流行的Maven仓库管理软件。Nexus包含了各种类型的仓库的概念,包括代理仓库、宿主仓库、仓库组等。每一种仓库都提供了丰富实用

    2024年02月19日
    浏览(60)
  • [R语言]手把手教你如何绘图(万字)

    目录 概况 常用高级图形 条形图 csv文件导入 csv文件导出 R语言sep函数 seq函数 with函数 直方图和密度估计图 盒型图 boxplot() 正态QQ图 散点图 pairs()散点矩阵图 曲线图 curve() 三维图 动态三维图 低级图形函数 abline() lines() legand()增加图例 axis()坐标轴 text()给图内区域添加文字 loc

    2024年02月04日
    浏览(70)
  • 数据库:如何安装SQL,手把手教你

    我们只选择两个: SQLEXPR_x64_CHS.exe SQLManagementStudio_x64_CHS.exe 如果你是32位系统就选择x86的(9102年了,应该都是64位的了吧)选中后下载到你经常保存文件的地方即可(这个地方并不是sql要安装的地方)。 全部下载后如图所示 正式安装 先安装SQL,再安装 SQL Management Studio 双击

    2024年01月16日
    浏览(78)
  • 【Linux】手把手教你实现udp服务器

    网络套接字~ 文章目录 前言 一、udp服务器的实现 总结 上一篇文章中我们讲到了很多的网络名词以及相关知识,下面我们就直接进入udp服务器的实现。 一、udp服务器的实现 首先我们需要创建五个文件(文件名可以自己命名也可以和我一样),分别是makefile,udpclient.cc,udpclient.hpp

    2024年02月13日
    浏览(49)
  • 【Linux】-vim的介绍,教你手把手使用vim

    💖作者:小树苗渴望变成参天大树 ❤️‍🩹作者宣言:认真写好每一篇博客 💨作者gitee:gitee 💞作者专栏:C语言,数据结构初阶,Linux,C++ 如 果 你 喜 欢 作 者 的 文 章 ,就 给 作 者 点 点 关 注 吧! 今天我们来具体介绍一下vim这个工具的使用,这个工具可以更好帮助我们编

    2024年02月08日
    浏览(61)
  • 手把手教你如何使用Fiddler抓包工具

    什么是 Fiddler? Fiddler 是一个 HTTP 协议调试代理工具,它能够记录并检查所有你的电脑和互联网之间的 HTTP 通讯。Fiddler 提供了电脑端、移动端的抓包、包括 http 协议和 https 协议都可以捕获到报文并进行分析;可以设置断点调试、截取报文进行请求替换和数据篡改,也可以进行

    2024年02月07日
    浏览(65)
  • Java基础--手把手教你如何从键盘录入信息

    从键盘录入信息 Scanner 有扫描仪的意思,sc是自己取的名字(有的人喜欢用input), new Scanner 是创建一个Scanner对象, System.in 代表电脑的键盘。 即,扫描电脑的键盘。 将第一步写完,我们在编译器里面看到, Scanner 标红了,报错了! ❓ 为啥报错呢? 我们要使用 Scanner ,需要

    2024年02月11日
    浏览(50)
  • 手把手教你如何扩展(破解)mybatisplus的sql生成

    众所周知, mybatisplus 提供了强大的代码生成能力,他默认生成的常用的CRUD方法(例如插入、更新、删除、查询等)的定义,能够帮助我们节省很多体力劳动。 他的 BaseMapper 中定义了这些常用的CRUD方法,我们在使用时,继承这个 BaseMapper 类就默认拥有了这些能力。 如果我们

    2024年02月05日
    浏览(67)
  • 手把手教你如何正确永久使用Microsoft Office365?

    office2019和office 365有什么区别的呢?为什么越来越多的人更加钟爱office365。简单来说office 2019的零售版本属于一次售出永久使用,价格上比较贵,而且功能上也不会再有更新。而office 365是一种基于云的订阅服务,我们花钱买的是一定时期的服务,在使用期间我们可以获得offi

    2024年02月07日
    浏览(62)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包