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

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

进度条

  • 基础知识
    • 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 1015 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 1015 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   else22     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.lryc.cn/news/300846.html

相关文章:

  • Sora和Pika,RunwayMl,Stable Video对比!网友:Sora真王者,其他都是弟
  • Go内存优化与垃圾收集
  • 【Spring】Bean 的生命周期
  • 云计算基础-存储基础
  • 问题:人的安全知识和技能是天生的。() #媒体#知识分享#学习方法
  • 【数据分享】2001~2020年青藏高原植被净初级生产力数据集
  • 【Spring MVC篇】返回响应
  • 阿里云BGP多线精品EIP香港CN2线路低时延,价格贵
  • (08)Hive——Join连接、谓词下推
  • 创新技巧|迁移到 Google Analytics 4 时如何保存历史 Universal Analytics 数据
  • 一个小而实用的 Python 包 pangu,实现在中文和半宽字符(字母、数字和符号)之间自动插入空格
  • openJudge | 中位数 C语言
  • ctfshow-文件上传(web151-web161)
  • cudnn免登录下载
  • SQLyog安装配置(注册码)连接MySQL
  • java+SSM+mysql 开放式实验管理系统78512-计算机毕业设计项目选题推荐(免费领源码)
  • 代码随想录算法训练营第三十三天|1005.K次取反后最大化的数组和、134.加油站、135.分发糖果
  • 解决LeetCode编译器报错的技巧:正确处理位操作中的数据类型
  • 一周学会Django5 Python Web开发-Django5操作命令
  • 反转链表【基础算法精讲 06】
  • Git 初学
  • 智胜未来,新时代IT技术人风口攻略-第四版(弃稿)
  • 渗透专用虚拟机(公开版)
  • HCIA-HarmonyOS设备开发认证V2.0-3.2.轻量系统内核基础-时间管理
  • 嵌入式培训机构四个月实训课程笔记(完整版)-Linux ARM驱动编程第五天-ARM Linux编程之file_operations详解 (物联技术666)
  • 第9章 网络编程
  • Python setattr函数
  • [C#]winform制作仪表盘好用的表盘控件和使用方法
  • 探索弗洛姆的思想:人类本质与爱的哲学
  • 【碎片知识点】安装Linux系统 VMware与kali