【Linux】 Linux 小项目—— 进度条

news2024/11/26 21:41:48

进度条

  • 基础知识
    • 1 \r && \n
    • 2 行缓冲区
    • 3 函数介绍
  • 进度条实现
    • 版本 1
      • 代码实现
      • 运行效果
    • 版本2
  • Thanks♪(・ω・)ノ谢谢阅读!!!
  • 下一篇文章见!!!

基础知识

1 \r && \n

我们熟悉的\n 实际上是两个操作 换行与回车
回车是将光标回到行开头

换行时将光标移到下一行
而“\r” 执行的是回车操作

我们可以看一下例子:

  1. 使用 “ \n ” 在这里插入图片描述
    来看效果:

在这里插入图片描述

  1. 不使用“ \n ”
    在这里插入图片描述

来看效果:
在这里插入图片描述
为什么会产生这样的区别???
原因就在缓冲区

2 行缓冲区

缓冲区是内存空间的一部分。也就是说,在内存空间中预留了一定的存储空间,这些存储空间用来缓冲输入或输出的数据,这部分预留的空间就叫做缓冲区。缓冲区根据其对应的是输入设备还是输出设备,分为输入缓冲区和输出缓冲区。

“\n” 可以清空缓冲区 使内容出现在显示器是上
fflush()函数也可以完成类似功能。

3 函数介绍

  1. Sleep函数
    Sleep函数可以使计算机程序(进程,任务或线程)进入休眠,使其在一段时间内处于非活动状态。
    注意在VC中Sleep中的第一个英文字符为大写的"S"
    在标准C中是sleep(S不要大写),下面使用大写的来说明,具体用什么看你用什么编译器。简单的说VC用Sleep,别的一律使用sleep。
    其中,Sleep()里面的单位,是以毫秒为单位,所以如果想让函数滞留1秒的话,应该是Sleep(1000);另外还需要引用头文件 #include <windows.h>
  2. usleep()函数
    usleep功能把进程挂起一段时间, 单位是微秒(百万分之一秒)
    注意需要引头文件 #include <unistd.h>个函数不能工作在windows 操作系统中。用在Linux的测试环境下面

进度条实现

版本 1

代码实现

progressbar.h

  1 #include <stdio.h>
  2 #include<string.h>
  3 #include<unistd.h>
  4                                                                                                                                                                               
  5 void progressbar();


progressbar.c

  1 #include"progressbar.h"
  2 
  3 #define style '#' 
  4 #define Length 101
  5 
  6 void progressbar(){
  7   char str[Length];
  8   memset(str,'\0',sizeof(str));
  9 
 10   int cnt = 0;
 11 
 12   while(cnt<101){
 13     printf("[%-100s][%3d%%]\r",str,cnt);
 14     fflush(stdout);
 15     str[cnt++] = style;                                                                                                                                                       
 16     usleep(20000);
 17   }
 18   printf("\n");
 19 
 20 }

main.c

  1 #include"progressbar.h"
  2 
  3 int main(){
  4   progressbar();
  5   return 0;                                                                                                                                                                   
  6 }

运行效果

在这里插入图片描述

版本2

显然 没有进度条会单独使用,一般都是搭配下载使用。
所以接下来我们来模拟一些下载过程:
progressbar.c

  1 #include"progressbar.h"
  2 
  3 #define style '#' 
  4 #define Length 101
  5 
  6 void progressbar(double total, double current){
  7   char str[Length];
  8   memset(str,'\0',sizeof(str));
  9 
 10   int cnt = 0;
 11   double rate =(current * 100.0) / total;
 12   int loop = (int)rate;
 13 
 14   while(cnt <= loop){
 15     str[cnt++] = style;
 16   }
 17 
 18   if(rate >=100){
 19     printf("[%-100s][%0.1lf%%]\r",str,100.0);                                                                                                                                 
 20   }
 21   else
 22     printf("[%-100s][%0.1lf%%]\r",str,rate);
 23 
 24   fflush(stdout);
 25 
 26 }

main.c

  1 #include"progressbar.h"
  2 
  3 double bandwidth = 1.0 * 1024 *1024;
  4 
  5 void download(double total){
  6 
  7   double current = 0;
  8   printf("Download Begin!\n");
  9 
 10   while(current <= total){
 11 
 12     current += bandwidth;                                                                                                                                                     
 13     progressbar(total,current);
 14     usleep(1000000);
 15   }
 16   printf("\ndownload done, filesize: %.1lf\n",total);
 17   printf("\n");
 18 }
 19 int main(){
 20 
 21   download(7.8*1024*1024);
 22 
 23 
 24   return 0;
 25 }

看看效果:
在这里插入图片描述
这下就非常类似我们的下载过程了!

Thanks♪(・ω・)ノ谢谢阅读!!!

下一篇文章见!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1451034.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

利用修改邻接变量

资源下载 【免费】突破密码认证程序&#xff08;修改邻接变量&#xff09;资源-CSDN文库 资源内容 源码 /*****************************************************************************To be the apostrophe which changed "Impossible" into "Im possib…

java.lang.NoClassDefFoundError: org/springframework/core/GenericTypeResolver

前言 小编我将用CSDN记录软件开发求学之路上亲身所得与所学的心得与知识&#xff0c;有兴趣的小伙伴可以关注一下&#xff01; 也许一个人独行&#xff0c;可以走的很快&#xff0c;但是一群人结伴而行&#xff0c;才能走的更远&#xff01;让我们在成长的道路上互相学习&…

Codeforces Round 926 (Div. 2)(A~C)

A. Sasha and the Beautiful Array 分析&#xff1a;说实话&#xff0c;打比赛的时候看到这题没多想&#xff0c;过了一下样例发现将数组排序一下就行&#xff0c;交了就过了。刚刚写题解反应过来&#xff0c;a2-a1a3-a2.....an-a(n-1) an - a1&#xff0c;所以最后结果只取决…

35岁转行,是我人生中最正确的选择

前言 经常听到有人说&#xff0c;35岁是职场的分水岭&#xff0c;但我觉得我的35岁&#xff0c;人生才刚刚开始。 35岁前后&#xff0c;我生二胎&#xff0c;考研&#xff0c;跳槽&#xff0c;转行&#xff0c;从传统行业到服务业&#xff0c;从服务业到新能源行业&#xff0…

第7讲 SpringSecurity执行原理概述

SpringSecurity执行原理概述 spring security的简单原理&#xff1a; SpringSecurity有很多很多的拦截器&#xff0c;在执行流程里面主要有两个核心的拦截器 1&#xff0c;登陆验证拦截器AuthenticationProcessingFilter 2&#xff0c;资源管理拦截器AbstractSecurityInterc…

问题:在解决思想认识上存在的问题讲解过程中和大家分享谁的一段原话() #其他#媒体

问题&#xff1a;在解决思想认识上存在的问题讲解过程中和大家分享谁的一段原话&#xff08;&#xff09; A&#xff0e;鲁迅 B&#xff0e;稻盛和夫 C&#xff0e;戴尔卡耐基 D&#xff0e;奥格曼狄诺 参考答案如图所示

应急响应实战笔记02日志分析篇(3)

第3篇:Web日志分析 ox01 Web日志 Web访问日志记录了Web服务器接收处理请求及运行时错误等各种原始信息。通过对WEB日志进行的安全分析&#xff0c;不仅可以帮助我们定位攻击者&#xff0c;还可以帮助我们还原攻击路径&#xff0c;找到网站存在的安全漏洞并进行修复。 我们来…

【Spring源码解读 底层原理高级进阶】【上】探寻Spring内部:BeanFactory和ApplicationContext实现原理讲解

&#x1f389;&#x1f389;欢迎光临&#x1f389;&#x1f389; &#x1f3c5;我是苏泽&#xff0c;一位对技术充满热情的探索者和分享者。&#x1f680;&#x1f680; &#x1f31f;特别推荐给大家我的最新专栏《Spring 狂野之旅&#xff1a;底层原理高级进阶》 &#x1f680…

java8并行数据处理与性能

块并用不同的线程分别处理每个数据块的流。这样一来&#xff0c;你就可以自动把给定操作的工作负荷分配给多核处理器的所有内核,让它们都忙起来。让我们用一个简单的例子来试验一下这个思想。假设你需要写一个方法&#xff0c;接受数字n作为参数&#xff0c;并返回从1到给定参数…

Web APIs -05

js执行机制 js是单线程&#xff0c;同一个时间只能做一件事情&#xff0c;所有任务需要排队所以有时候会渲染不连贯 同步任务 都在主线程上执行&#xff0c;形成一个执行栈 异步任务 js的异步是通过回调函数实现的分为三类&#xff1a;1.普通事件&#xff1a;click等&…

基于Python实现Midjourney集成到(个人/公司)平台中

目前Midjourney没有对外开放Api&#xff0c;想体验他们的服务只能在discord中进入他们的频道进行体验或者把他们的机器人拉入自己创建的服务器中&#xff1b;而且现在免费的也用不了了&#xff0c;想使用就得订阅。本教程使用midjourney-api这个开源项目&#xff0c;搭建Midjou…

【并发编程】AQS原理

&#x1f4dd;个人主页&#xff1a;五敷有你 &#x1f525;系列专栏&#xff1a;并发编程 ⛺️稳中求进&#xff0c;晒太阳 1. 概述 全称是 AbstractQueuedSynchronizer&#xff0c;是阻塞式锁和相关的同步器工具的框架 特点&#xff1a; 用 state 属性来表示资源的状…

【牛客面试必刷TOP101】Day22.BM16 删除有序链表中重复的元素-II和BM21 旋转数组的最小数字

作者简介&#xff1a;大家好&#xff0c;我是未央&#xff1b; 博客首页&#xff1a;未央.303 系列专栏&#xff1a;牛客面试必刷TOP101 每日一句&#xff1a;人的一生&#xff0c;可以有所作为的时机只有一次&#xff0c;那就是现在&#xff01;&#xff01;&#xff01;&…

【白话前端】一篇文章区分js库和js框架

假定你选择自助游&#xff0c;你需要找不同服务商帮你解决吃住行的问题&#xff0c;这些服务商就是js库。你也可以选择旅行社&#xff0c;给你全解决&#xff0c;这是js框架。 JavaScript库和框架都是用于简化Web开发的工具&#xff0c;但它们之间有一些区别。 JavaScript库&a…

Codeforces Round 926 (Div. 2)(A,B,C,D,E,F)

这场还是很有含金量的&#xff0c;B题开始就有难度了&#xff0c;B是个推结论的题&#xff0c;C要推结论然后递推&#xff0c;D题是有点难的树上DP&#xff08;主要是状态转移方程不好写&#xff09;&#xff0c;E题是个二进制预处理然后状压DP&#xff0c;F题是个数论&#xf…

【研究生复试】计算机软件工程人工智能研究生复试——资料整理(速记版)——JAVA

1、JAVA 2、计算机网络 3、计算机体系结构 4、数据库 5、计算机租场原理 6、软件工程 7、大数据 8、英文 自我介绍 1. Java 1. 和 equals的区别 比较基本数据类型是比较的值&#xff0c;引用数据类型是比较两个是不是同一个对象&#xff0c;也就是引用是否指向同 一个对象&…

绝地求生:“觉醒之旅”通行证曝光,西游主题通行证及成长型武器即将上线

随着27赛季即将结束&#xff0c;有关28.1版本的皮肤及通行证内容也被爆料出来&#xff0c;本次通行证为工坊通行证&#xff0c;和去年四圣兽通行证为同一类型&#xff0c;将于2月7日更新至正式服 除了通行证获取工坊币还是可以开箱获取并兑换一些奖励 先看通行证 四个套装应该分…

Diffusion Transformer U-Net for MedicalImage Segmentation

用于医学图像分割的扩散变压器U-Net 摘要&#xff1a; 扩散模型在各种发电任务中显示出其强大的功能。在将扩散模型应用于医学图像分割时&#xff0c;存在一些需要克服的障碍:扩散过程调节所需的语义特征与噪声嵌入没有很好地对齐;这些扩散模型中使用的U-Net骨干网对上下文信…

OLED显示红外遥控键码

基本原理 本遥控器的编码是NEC编码&#xff0c;为PWM&#xff08;脉冲宽度调制&#xff09;。 发射红外载波的时间固定&#xff0c;通过改变不发射载波的时间来改变占空比。 逻辑“0”是由0.56ms的38KHZ载波和0.560ms的无载波间隔组成&#xff1b;逻辑“1”是由0.56ms的38KHZ…

计算机组成原理(2)-----存储芯片与CPU的连接

目录 一.单块存储芯片与CPU的连接 二.多块存储芯片与CPU的连接 1.位扩展 2.字扩展 &#xff08;1&#xff09;线选法 &#xff08;2&#xff09;译码器片选法 3.字位同时扩展 三.译码器相关 一.单块存储芯片与CPU的连接 如图所示是8*8位的芯片&#xff0c;总共8个存储…