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

Linux:进度条的创建

 

 

目录

使用工具的简单介绍: 

\r  :

fflush  :

倒计时的创建:

倒计时的工作原理:

 进度条的创建:

 不同场景下、打印任意长度的进度条:

main .c  

procbor.c 

测试效果:

使用工具的简单介绍: 

在创建进度条之前,首先要明白两个工具,fflush 和  \r 

\r  :

熟悉键盘以及经常使用键盘的小伙伴应该知道,现在的键盘上的enter 回车键 和早之前的回车键样式是不一样的,如下图所示:

而且,还有一个大家并不是非常熟悉的知识,回车键的功能其实是两个,一个是换行,一个是回车。

所谓换行就是将光标从这一行变到下一行中,且是垂直下落,除此之外光标位置不会有其他的移动。

而回车就是回到当前行的最前端最开头位置。

在Linux系统中,换行和回车是并不是像键盘上的回车键一样合在一起使用,而是分别由两个命令控制着。  

\r,就是Linux中的回车,在Linux的文件文本中的作用是将光标移动到当前行的开头位置,即回车。它通常与\n(换行符)一起使用,表示换行并回到行首。

fflush  :

fflush函数的作用是刷新缓冲区,将缓冲区中的数据立即写入到文件中。它可以用来确保数据被及时写入文件,而不是等到缓冲区满或程序结束时才写入。

在Linux中,通常使用fflush(stdout) 将缓冲区的数据冲刷到显示器上,让数据显现。

倒计时的创建:

倒计时的工作原理:

倒计时指的是在一个位置上的数字随着光标的不断闪烁而不断的更新减小,直到为0。

在如果要在Linux上实现倒计时,除了上述的两个工具外还需要额外了一个工具,sleep  休眠命令,休眠命令可以解决倒计时数字的停顿的问题。

在Linux实现的原理则

  • 利用缓冲区实现一个简单的倒计时,使用\r返回光标位置并清除缓冲区数据,但是使用fflush将缓冲区的数据提取到了显示器文件中。
  • 单单只有\r是不行的,因为\r虽然把光标的位置进行了返回(输入一个数字光标会移动到下一个位置,但是\r会在移动下一个位置后会返回回去),但是会将数字从缓冲区中删除清空,导致在显示器中显示不出来,所以需要fflush进行提取 

 进度条的创建:

一个进度条最基本的要求是要有进度读条,要有显示进度读条占总数据占比的百分比数字,要有旋转的表示进度正在进行中的光标图案。

在Linux中,可以使用 #  =  等符号表示进度读条,而根据之前倒计时的操作,我们直到需要定义一块区域作为缓冲区,随后不断地更新和刷新缓冲区内部的数据,将其数据显示到显示屏上依次达到进度条不断地在更新进度,不断地在增长的效果。

同时,为了表示进度条不断地在增长,因此需要使用循环函数在缓冲区中不断地添加#来显示进度条的增长。

对于百分比数据,可以利用定义好的缓冲区大小来通过计算得到,在上图中,定义的百分比大小是101,其中的1表示的是最初始的数据,也就是 \0 来表达进度是0 ,所以只要按照#的个数来计算百分比的占比是多少。

同时为了保证进度条是一个不会因为进度的增长而不断变长,而是有一个固定长度的,所以使用%-100实现距离的扩充以及往右边增长进度的效果。 

而百分比的数据则需要打印除#号的个数以及加上%即可完成,注意%符号在文件中需要两个%才能在显示屏上显示出来。

最后,光标的添加,可以将光标的图案进行展开,然后利用\r的特性和#号个数的和光标的展开后的字符数进行计算,计算出每一个#的光标的图案,同时需要注意的是\符号需要两个\才能打印出来!

 不同场景下、打印任意长度的进度条:

因为进度条是不会单独出现的,进度条要配合具体的场景使用,所以在此处我们建立一个文件下载进度的进度条。 

main .c  

拥有下载场景的进度条,进行下载文件:

下载文件的大小:filesize  =  100兆b  = 100 * 1024 * 1024 * 1.0

下载场景 download  

当前累计下载的数据量 current = 0.0 初始

只要下载量小于文件大小就要一直下载 while (current < = filesize)

网速下载带宽 /下载速度: bandwidth =  1024 * 1024 *1.0   本来不是1.0的因为网速的下载速度是随机的但这里为了方便就不弄了  1024 *1024 表示一兆

下载的本质是当前的下载量加上下载速度给予的下载量,所以就构成了current + = bandwidth

同时我们的下载可能是在网络上进行的,会有些网络的卡顿,于是要加上sleep表示网络波动的效果

procbor.c 

下载文件场景下的进度条本质上是给予任意数字打印任意长度进度条,所以这里传输的参数total表示的是文件的下载大小,而current表达的是文件的当前下载量。

代码和之前的进度条代码并未有太大的变化,唯一的变化是#的多少和数据的占比取决于当前下载量和文件大小之间的关系运算。

下载量*100 / 文件大小  得出 占比

例如 下载量是 2 文件大小是100  2/100 = 0.2   2*100/100 = 2  表示两个 # 

两个#同时表示2%

测试效果:

 


 

相关文章:

Linux:进度条的创建

目录 使用工具的简单介绍&#xff1a; \r &#xff1a; fflush &#xff1a; 倒计时的创建&#xff1a; 倒计时的工作原理&#xff1a; 进度条的创建&#xff1a; 不同场景下、打印任意长度的进度条&#xff1a; main .c procbor.c 测试效果&#xff1a; 使用工具…...

treeview

QML自定义一个TreeView&#xff0c;使用ListView递归 在 Qt5 的 QtQuick.Controls 2.x 中还没有 TreeView 这个控件&#xff08;在 Qt6 中出了一个继承自 TableView 的 TreeView&#xff09;&#xff0c;而且 QtQuick.Controls 1.x 中的也需要配合 C model 来自定义&#xff0c…...

Android开发中自定义View实现RecyclerView下划线

本篇文章主要讲解的是有关RecyclerView下划线的使用&#xff0c;主要有几个方法&#xff0c;具体如下&#xff1a; 第一种方式&#xff1a;网格分割线 public class GridDivider extends RecyclerView.ItemDecoration { private Drawable mDividerDarwable; private i…...

MySQL前百分之N问题--percent_rank()函数

PERCENT_RANK()函数 PERCENT_RANK()函数用于将每行按照(rank - 1) / (rows - 1)进行计算,用以求MySQL中前百分之N问题。其中&#xff0c;rank为RANK()函数产生的序号&#xff0c;rows为当前窗口的记录总行数 PERCENT_RANK()函数返回介于 0 和 1 之间的小数值 selectstudent_…...

【高效开发工具系列】Wolfram Alpha

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…...

分享7种SQL的进阶用法

推荐一款ChatGPT4.0国内站点,每日有免费使用额度,支持PC、APP、VScode插件同步使用 SQL(Structured Query Language)是一种强大的数据库查询和操作语言,它用于与关系数据库进行交互。随着数据的不断增长和应用需求的日益复杂,掌握SQL的进阶用法对于数据库管理员、数据分析…...

protobuf-go pragma.go 文件介绍

pragma.go 文件 文件位于&#xff1a; https://github.com/protocolbuffers/protobuf-go/blob/master/internal/pragma/pragma.go 该文件核心思想&#xff1a; 利用 Golang 语法机制&#xff0c;扩展 Golang 语言特性 目前&#xff0c;该文件提供以下 4 个功能&#xff1a; …...

C#设置程序开机启动

1&#xff1a;获取当前用户&#xff1a; System.Security.Principal.WindowsIdentity identity System.Security.Principal.WindowsIdentity.GetCurrent();System.Security.Principal.WindowsPrincipal principal new System.Security.Principal.WindowsPrincipal(identity);…...

爱可声助听器参与南湖区价值百万公益助残捐赠活动成功举行

“声音大小合适吗&#xff1f;能听清楚吗&#xff1f;”今天下午&#xff0c;一场助残捐赠活动在南湖区凤桥镇悄然举行&#xff0c;杭州爱听科技有限公司带着验配团队和听力检测设备来到活动现场&#xff0c;为南湖区听障残疾人和老人适配助听器。 家住余新镇的75岁的周奶奶身体…...

SpringBoot 实现定时任务

在项目我们会有很多需要在某一特定时刻自动触发某一时间的需求&#xff0c;例如我们提交订单但未支付的超过一定时间后需要自动取消订单。 定时任务实现的几种方式&#xff1a; Timer&#xff1a;java自带的java.util.Timer类&#xff0c;使用这种方式允许你调度一个java.util…...

将Vue2中的console.log调试信息移除

前端项目构建生产环境下的package时&#xff0c;咱们肯定要去掉development环境下的console.log&#xff0c;如果挨个注释可就太费劲了&#xff0c;本文介绍怎么使用 babel-plugin-transform-remove-console 移除前端项目中所有的console.log. 1. 安装依赖 npm install babel-…...

EMC设计检查建议,让PCB layout达到最佳性能

EMC&#xff1a;Electro Magnetic Compatibility的简称&#xff0c;也称电磁兼容&#xff0c;各种电气或电子设备在电磁环境复杂的共同空间中&#xff0c;以规定的安全系数满足设计要求的正常工作能力。 本章对于 RK3588产品设计中的 ESD/EMI防护设计及EMC的设计检查给出了建议…...

常用抓包软件集合(Fiddler、Charles)

1. Fiddler 介绍&#xff1a;Fiddler是一个免费的HTTP和HTTPS调试工具&#xff0c;支持Windows平台。它可以捕获HTTP和HTTPS流量&#xff0c;并提供了丰富的调试和分析功能。优点&#xff1a;易于安装、易于使用、支持多种扩展、可以提高开发效率。缺点&#xff1a;只支持Wind…...

C++入门(一)— 使用VScode开发简介

文章目录 C 介绍C 擅长领域C 程序是如何开发编译器、链接器和库编译预处理编译阶段汇编阶段链接阶段 安装集成开发环境 &#xff08;IDE&#xff09;配置编译器&#xff1a;构建配置配置编译器&#xff1a;编译器扩展配置编译器&#xff1a;警告和错误级别配置编译器&#xff1…...

PeakCAN连接到WSL2 Debian

操作步骤 按照以下步骤进行操作&#xff1a; 在Windows下安装PeakCAN驱动并安装&#xff0c;地址是https://www.peak-system.com/PCAN-USB.199.0.html?&L1 在Windows下安装usbipd&#xff0c;地址是https://github.com/dorssel/usbipd-win/releases&#xff0c;最新版是…...

Spring Boot导出EXCEL 文件

主要功能:实现java导出excel到本地 JDK版本&#xff1a;openJDK 20.0.1 依赖pom.xml <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchem…...

编程笔记 html5cssjs 060 css响应式布局

编程笔记 html5&css&js 060 css响应式布局 一、响应式布局二、Bootstrap简介总结 CSS响应式布局是一种可以在不同设备&#xff08;例如桌面电脑、平板电脑、手机等&#xff09;上自动调整页面布局和样式的技术。 一、响应式布局 使用CSS响应式布局的关键是媒体查询&am…...

建筑行业如何应用3D开发工具HOOPS提升实时设计体验?

建筑行业一直在迅速发展&#xff0c;技术的不断创新也为其带来了新的机遇与挑战。在这一领域&#xff0c;三维图形技术的应用变得尤为重要。HOOPS技术&#xff0c;作为一套用于开发三维图形应用程序的工具和库&#xff0c;为建筑行业带来了深刻的变革。本文将探讨HOOPS技术在建…...

【grafana】使用教程

【grafana】使用教程 一、简介二、下载及安装及配置三、基本概念3.1 数据源&#xff08;Data Source&#xff09;3.2 仪表盘&#xff08;Dashboard&#xff09;3.3 Panel&#xff08;面板&#xff09;3.4 ROW&#xff08;行&#xff09;3.5 共享及自定义 四、常用可视化示例4.1…...

seata 分布式

一、下载安装seata 已经下载好的朋友可以跳过这个步骤。这里下载的是seata1.6.1这个版本。 1、进入seata官网 地址&#xff1a; https://seata.io/zh-cn/index.html 2、进入下载 3、点击下载地址 下载地址&#xff1a; https://github.com/seata/seata 二、配置seata 进入c…...

大数据学习栈记——Neo4j的安装与使用

本文介绍图数据库Neofj的安装与使用&#xff0c;操作系统&#xff1a;Ubuntu24.04&#xff0c;Neofj版本&#xff1a;2025.04.0。 Apt安装 Neofj可以进行官网安装&#xff1a;Neo4j Deployment Center - Graph Database & Analytics 我这里安装是添加软件源的方法 最新版…...

ubuntu搭建nfs服务centos挂载访问

在Ubuntu上设置NFS服务器 在Ubuntu上&#xff0c;你可以使用apt包管理器来安装NFS服务器。打开终端并运行&#xff1a; sudo apt update sudo apt install nfs-kernel-server创建共享目录 创建一个目录用于共享&#xff0c;例如/shared&#xff1a; sudo mkdir /shared sud…...

MMaDA: Multimodal Large Diffusion Language Models

CODE &#xff1a; https://github.com/Gen-Verse/MMaDA Abstract 我们介绍了一种新型的多模态扩散基础模型MMaDA&#xff0c;它被设计用于在文本推理、多模态理解和文本到图像生成等不同领域实现卓越的性能。该方法的特点是三个关键创新:(i) MMaDA采用统一的扩散架构&#xf…...

多模态商品数据接口:融合图像、语音与文字的下一代商品详情体验

一、多模态商品数据接口的技术架构 &#xff08;一&#xff09;多模态数据融合引擎 跨模态语义对齐 通过Transformer架构实现图像、语音、文字的语义关联。例如&#xff0c;当用户上传一张“蓝色连衣裙”的图片时&#xff0c;接口可自动提取图像中的颜色&#xff08;RGB值&…...

mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包

文章目录 现象&#xff1a;mysql已经安装&#xff0c;但是通过rpm -q 没有找mysql相关的已安装包遇到 rpm 命令找不到已经安装的 MySQL 包时&#xff0c;可能是因为以下几个原因&#xff1a;1.MySQL 不是通过 RPM 包安装的2.RPM 数据库损坏3.使用了不同的包名或路径4.使用其他包…...

嵌入式学习笔记DAY33(网络编程——TCP)

一、网络架构 C/S &#xff08;client/server 客户端/服务器&#xff09;&#xff1a;由客户端和服务器端两个部分组成。客户端通常是用户使用的应用程序&#xff0c;负责提供用户界面和交互逻辑 &#xff0c;接收用户输入&#xff0c;向服务器发送请求&#xff0c;并展示服务…...

Mysql8 忘记密码重置,以及问题解决

1.使用免密登录 找到配置MySQL文件&#xff0c;我的文件路径是/etc/mysql/my.cnf&#xff0c;有的人的是/etc/mysql/mysql.cnf 在里最后加入 skip-grant-tables重启MySQL服务 service mysql restartShutting down MySQL… SUCCESS! Starting MySQL… SUCCESS! 重启成功 2.登…...

Kafka主题运维全指南:从基础配置到故障处理

#作者&#xff1a;张桐瑞 文章目录 主题日常管理1. 修改主题分区。2. 修改主题级别参数。3. 变更副本数。4. 修改主题限速。5.主题分区迁移。6. 常见主题错误处理常见错误1&#xff1a;主题删除失败。常见错误2&#xff1a;__consumer_offsets占用太多的磁盘。 主题日常管理 …...

Oracle11g安装包

Oracle 11g安装包 适用于windows系统&#xff0c;64位 下载路径 oracle 11g 安装包...

Leetcode33( 搜索旋转排序数组)

题目表述 整数数组 nums 按升序排列&#xff0c;数组中的值 互不相同 。 在传递给函数之前&#xff0c;nums 在预先未知的某个下标 k&#xff08;0 < k < nums.length&#xff09;上进行了 旋转&#xff0c;使数组变为 [nums[k], nums[k1], …, nums[n-1], nums[0], nu…...