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

Linux第一个小程序——进度条

目录

回车和换行

缓冲区

设计倒计时

进度条(多文件操作)

Version1:进度条

Version2:应用场景+进度条

Version3:升级彩色进度条


回车和换行

回车\r:'r' 回车,回到当前行的行首,而不会换到下一行,如果接着输出的话,本行以前的内容会被逐一覆盖。

换行\n:'n' 换行,换到当前位置的下一行,而不会回到行首。(满足回车/换行两种功能)

缓冲区

  1 #include<stdio.h>2 #include<unistd.h>//sleep3 int main()4 {5   printf("hello linux,hello word");                                                                          6   sleep(3);7   return 0;8 }
  1 #include<stdio.h>2 #include<unistd.h>//sleep3 int main()4 {5   printf("hello linux,hello word\n");                                                                          6   sleep(3);7   return 0;8 }

屏幕录制 2024-01-27 194734

执行上面两段代码(它们的区别是是否包含\n)

我们清晰的发现:

  • 带有\n的就直接出现在了显示器(屏幕)上
  • 没有带\n的程序结束之后才回显示在终端上

结论:包括\n在内的之前全部字符串全部刷新到我们的显示器上(行刷新)

刷新的方式:

  •  \n
  • 缓冲区满了
  • 程序结束                     
  • 强制刷新fflush   fflush(stdout)
  • 头文件#include<unistd.h> //sleep所需要的头文件包含【Linux系统编程】Linux的系统库中的unistd.h头文件的作用-CSDN博客
  • fflush - C++ Reference (cplusplus.com)
  • stdout - C++ Reference (cplusplus.com)
//输出流--显示器/终端
extern FILE * stdout;
extern FILE * stderr;
//输入流--键盘
extern FILE * stdin;
//开机默认打开三个流(输入/输出流)
  //修改之后1 #include<stdio.h>2 #include<unistd.h>//sleep3 int main()4 {5   printf("hello linux,hello word");6   fflush(stdout);                                                                                            7   sleep(3);                                                                                8   return 0;                                                                                9 } 

为什么是行刷新??缓冲区的存在又是为了什么?立即刷新?

  • 行刷新既考虑到了用户的读取(用户一般是一行一行读取),又考虑到了效率问题。
  • 缓冲区的存在就是为了提高效率。
  • 立即刷星就是我们在终端/显示器从键盘输入文字字符,立即出现在用户面前。
  • 应用思考:Linux上输入密码不显示的原因。 

设计倒计时

  1 #include<stdio.h>2 #include<unistd.h>3 int main()4 {5   int cnt=10;6   while(cnt>=0)7   {8     printf("倒计时:%2d\r",cnt);//2d  9     fflush(stdout);//刷新数据10     cnt--;11     sleep(1);//休眠12   }13   printf("\n");                                                                                              14   return 0;15 }
  • 原理:同一个位置用不同的数字做刷新,所以是动态的变化的 。
  • \r回车,光标回到最开始覆盖前面数据,历史数据在缓冲区已经被fflush刷新到终端上了
  • 2d 是两个字符占位符,我们输入123,输入的是字符1 字符2 字符3 所以10需要两个占位符。
  • 显示器是字符设备。
  • sleep函数引用#include<unistd.h>

最终呈现效果: 

屏幕录制 2024-01-28 122350

进度条(多文件操作)

  • Processbar.h 包含头文件&函数声明
  • Processbar.c函数实现
  • Main.c函数调用/测试
  • Makefile自动化项目构建
  • Makefile里面不需要包含头文件Processbar.h,因为头文件在当前目录下且Processbar.c和Main.c都包含了Processbar.h在自动化构建编译时,回展开头文件,所以不需要!!

 测试一下:

Version1:进度条

#include"Processbar.h"2 //void test()3 //{4 //  printf("this is a test\n");5 //  printf("this is a test\n");6 //  printf("this is a test\n");7 //  printf("this is a test\n");8 //  printf("this is a test\n");9 //  printf("this is a test\n");10 //}     11 #define length 101 //包括\012 #define DataType '#'13 const char*MoveType = "|/-\\";14 void ProcBar()15 {16   char Bar[length];//缓存空间17   memset(Bar,'\0',sizeof(Bar));18   int cnt=0;19   while(cnt<=100)20   {21     printf("[%-100s][%3d%%][%c]\r",Bar,cnt,MoveType[cnt%strlen(MoveType)]);22     fflush(stdout);23     Bar[cnt++]=DataType;24     usleep(20000);//0.02s=20000微秒25   }26   printf("\n");27 }

屏幕录制 2024-01-28 151404

 

注释:

  • memset设置为了遇到\0停止打印,如果不清空全是随机值打印。
  • 单位换算
  • printf一般是右对齐,加上符号-左对齐
  • %% 打印出 %
  • \\ 是反斜杠\的字面常量
  • 占位符100% 3%
  • 取余是为了防止数组越界!!
  • 强制刷新fflush(stdout)
  • 设计\-/\\ 进度条一直在加载/下载,但是因为网速等原因,卡住不动,但是此刻用户又想看到一个进度条在下载的动态效果

Version2:应用场景+进度条

  • 下载文件filesize
  • 当前下载量currentsize
  • 带宽/网速
  • 单位换算1兆=1024*1024字节

Version3:升级彩色进度条

🙂感谢大家的阅读,若有错误和不足,欢迎指正

相关文章:

Linux第一个小程序——进度条

目录 回车和换行 缓冲区 设计倒计时 进度条&#xff08;多文件操作&#xff09; Version1&#xff1a;进度条 Version2&#xff1a;应用场景进度条 Version3&#xff1a;升级彩色进度条 回车和换行 回车\r&#xff1a;r 回车&#xff0c;回到当前行的行首&#xff0c;而…...

(N-141)基于springboot,vue网上拍卖平台

开发工具&#xff1a;IDEA 服务器&#xff1a;Tomcat9.0&#xff0c; jdk1.8 项目构建&#xff1a;maven 数据库&#xff1a;mysql5.7 系统分前后台&#xff0c;项目采用前后端分离 前端技术&#xff1a;vueelementUI 服务端技术&#xff1a;springbootmybatis-plusredi…...

深入了解Figure的结构与层次

深入了解Figure的结构与层次 一 Matplotlib中的Figure1.1 Figure的概念和作用:1.2.创建Figure对象:1.3 Figure的属性和方法: 二 子图&#xff08;Axes&#xff09;的角色与创建2.1 子图&#xff08;Axes&#xff09;的概念&#xff1a;2.2 创建子图的方法&#xff1a;2.3 Axes的…...

c语言基础6

1.逗号表达式 逗号表达式&#xff0c;就是用逗号隔开的多个表达式。 逗号表达式&#xff0c;从左向右依次执行。整个表达式的结果是最后⼀个表达式的结果。 我们来看下面的一个代码&#xff1a; int main() {int a 1;int b 2;int ret (a > b, a b 2, b, b a 1);p…...

kotlin sum 与 sumOf

kotlin 中 sum 的作用&#xff1a; 计算一个列表里面数字的总和&#xff1a; val numbers listOf(1, 2, 3, 4, 5) val sum numbers.sum() println("The sum is: $sum") // 打印结果: The sum is: 15 kotlin中sumOf的作用&#xff1a; 也是计算一个列表里面数字…...

php怎么输入一个变量,http常用的两种请求方式getpost(ctf基础)

php是网页脚本语言&#xff0c;网页一般支持两种提交变量的方式&#xff0c;即get和post get方式传参 直接在网页URL的后面写上【?a1027】&#xff0c;如果有多个参数则用&符号连接&#xff0c; 如【?a10&b27】 post方式传参 需要借助插件&#xff0c;ctfer必备插…...

Spring Boot 项目配置文件

文章目录 配置文件的作用properties基本语法读取文件信息缺点 yml基本语法优点配置不同数据类型字符串类型的写法 配置对象配置集合 读取配置文件的几种方法EnvironmentPropertySource使用原生方式读取 设置不同环境的配置文件 配置文件的作用 整个项目中重要的数据都是在配置…...

学校“数据结构”课程Project—扩展功能(自主设计)

目录 一、设想功能描述 想法缘起 目标功能 二、问题抽象 三、算法设计和优化 1. 易想的朴素搜索 / dp 搜索想法 动态规划&#xff08;dp&#xff09;想法 2. 思考与优化 四、算法实现 五、结果示例 附&#xff1a;使用的地图API 一、设想功能描述 想法缘起 OSM 导出…...

从0开始搭建若依微服务项目 RuoYi-Cloud(保姆式教程 一)

掌握陌生项目解读技巧 掌握若依(RuoYi-Cloud)框架 掌握SpringCloud Alibaba体系项目开发套路&#xff0c;结合我之前所有企业项目来学习就知道有多么简单。 一、框架介绍 1. 简介 一直想做一款后台管理系统&#xff0c;看了很多优秀的开源项目但是发现没有合适的。于是利用空…...

【Chrome】浏览器怎么清除缓存并强制刷新

文章目录 1、正常刷新&#xff1a;正常刷新网页&#xff0c;网页有缓存则采用缓存。 F5 或 刷新键2、强制刷新&#xff1a;忽略缓存刷新&#xff0c;重新下载资源不用缓存。 CtrlF5 或 ShiftF5 或 CtrlShiftR3、在浏览器的设置里面清除所有数据...

Android创建保存Excel文件

Android开发生成保存Excel文件&#xff0c;首先下载两个jar包。下载地址&#xff1a;Android读写Excel文件的两个jar包资源-CSDN文库 poi-3.12-android-a.jar poi-ooxml-schemas-3.12-20150511-a.jar 把jar包放在app的libs文件夹下&#xff0c;引用jar我一般都在build.gradle的…...

Selenium + Django + Echarts 实现亚马逊商品数据可视化爬虫项目

最近完成了1个爬虫项目&#xff0c;记录一下自己的心得。 项目功能简介 根据用户输入商品名称、类别名称&#xff0c;使用Selenium, BS4等技术每天定时抓取亚马逊商品数据&#xff0c;使用Pandas进行数据清洗后保存在MySql数据库中. 使用Django提供用户端功能&#xff0c;显…...

【深度学习】初识深度学习

初识深度学习 什么是深度学习 关系&#xff1a; #mermaid-svg-7QyNQ1BBaD6vmMVi {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-7QyNQ1BBaD6vmMVi .error-icon{fill:#552222;}#mermaid-svg-7QyNQ1BBaD6vmMVi .err…...

探索 Xind3 生态系统,解锁铭文资产的新玩法

铭文市场的兴起&#xff0c;不仅是新资产发行方案向市场的代表&#xff0c;更是新资产革命的代表。通过“公平启动”的方式&#xff0c;任何人都可以按照先到先得的原则“铸造”资产。虽然这看起来是意识形态上的新升级&#xff0c;但实际上最火的铭文风潮是由CEX引发的。 我们…...

js有哪些内置对象?

在 JavaScript 中&#xff0c;内置对象可以分为三类&#xff1a;原始值的包装对象、构造函数和其他对象。这里列举一些常见的内置对象及其方法&#xff1a; 原始值的包装对象&#xff1a; String&#xff1a;字符串类型的包装对象&#xff0c;有 charAt、concat、indexOf、repl…...

拦截器的简单使用

拦截器的简单使用 拦截器的使用创建拦截器preHandle 目标方法执行前执行postHandle 目标方法执行后执行afterCompletion 视图渲染后执行 拦截器使用场景返回值注册拦截器运用拦截器 拦截器的使用 创建拦截器 首先,我们需要创建一个拦截器器的类,并且需要继承自HandlerIntercep…...

【gmsh源码阅读】OCC对象绑定tag及获取几何与网格映射关系

一、Tag是什么&#xff1f; gmsh中的几何模型相对于OCC的模型增加了id编号&#xff0c;也叫tag&#xff0c;在gmsh中可以显示出来。在gmsh中&#xff0c;点、线、面、体都有Tag&#xff0c;以方便对其查找定位查找。在OCC中TopoDS_Shape只有几何与拓扑结构&#xff0c;没有唯一…...

【RTP】webrtc 学习3: webrtc对h264的rtp解包

rtp_rtcp\source\video_rtp_depacketizer_h264.cc【RTP】webrtc 学习2: webrtc对h264的rtp打包 中分析了打包过程的代码,这样再来看解析过程的源码就容易多了:本代码主要基于m79,m98类似。这里注明了jitterbuffer 会再次 做 解析stap-a 变为NAL units解析ParseFuaNalu 第一…...

幻兽帕鲁服务器多少钱?4核16G支持32人在线吗?

4核16G服务器是幻兽帕鲁Palworld推荐的配置&#xff0c;阿里云和腾讯云均推出针对幻兽帕鲁的4核16G服务器&#xff0c;阿里云4核16G幻兽帕鲁专属服务器32元1个月、66元3个月&#xff0c;腾讯云4核16G14M服务器66元1个月、277元3个月、1584元一年。云服务器吧yunfuwuqiba.com分享…...

AD/DA(模数数模转换)

文章目录 前言一、介绍部分介绍AD/DA硬件电路模型硬件电路ADC模块DAC模块ADC0809DAC0832 运算放大器&#xff08;运放&#xff09;运放电路 DA原理两种不同的DA转换器 AD原理部分AD/DA性能指标XPT2046介绍主要功能XPT2046时序结构控制字节解释单端模式配置表 二、实例使用AD读取…...

UE5 学习系列(三)创建和移动物体

这篇博客是该系列的第三篇&#xff0c;是在之前两篇博客的基础上展开&#xff0c;主要介绍如何在操作界面中创建和拖动物体&#xff0c;这篇博客跟随的视频链接如下&#xff1a; B 站视频&#xff1a;s03-创建和移动物体 如果你不打算开之前的博客并且对UE5 比较熟的话按照以…...

CentOS下的分布式内存计算Spark环境部署

一、Spark 核心架构与应用场景 1.1 分布式计算引擎的核心优势 Spark 是基于内存的分布式计算框架&#xff0c;相比 MapReduce 具有以下核心优势&#xff1a; 内存计算&#xff1a;数据可常驻内存&#xff0c;迭代计算性能提升 10-100 倍&#xff08;文档段落&#xff1a;3-79…...

汽车生产虚拟实训中的技能提升与生产优化​

在制造业蓬勃发展的大背景下&#xff0c;虚拟教学实训宛如一颗璀璨的新星&#xff0c;正发挥着不可或缺且日益凸显的关键作用&#xff0c;源源不断地为企业的稳健前行与创新发展注入磅礴强大的动力。就以汽车制造企业这一极具代表性的行业主体为例&#xff0c;汽车生产线上各类…...

Golang dig框架与GraphQL的完美结合

将 Go 的 Dig 依赖注入框架与 GraphQL 结合使用&#xff0c;可以显著提升应用程序的可维护性、可测试性以及灵活性。 Dig 是一个强大的依赖注入容器&#xff0c;能够帮助开发者更好地管理复杂的依赖关系&#xff0c;而 GraphQL 则是一种用于 API 的查询语言&#xff0c;能够提…...

STM32标准库-DMA直接存储器存取

文章目录 一、DMA1.1简介1.2存储器映像1.3DMA框图1.4DMA基本结构1.5DMA请求1.6数据宽度与对齐1.7数据转运DMA1.8ADC扫描模式DMA 二、数据转运DMA2.1接线图2.2代码2.3相关API 一、DMA 1.1简介 DMA&#xff08;Direct Memory Access&#xff09;直接存储器存取 DMA可以提供外设…...

GitHub 趋势日报 (2025年06月08日)

&#x1f4ca; 由 TrendForge 系统生成 | &#x1f310; https://trendforge.devlive.org/ &#x1f310; 本日报中的项目描述已自动翻译为中文 &#x1f4c8; 今日获星趋势图 今日获星趋势图 884 cognee 566 dify 414 HumanSystemOptimization 414 omni-tools 321 note-gen …...

SpringTask-03.入门案例

一.入门案例 启动类&#xff1a; package com.sky;import lombok.extern.slf4j.Slf4j; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cache.annotation.EnableCach…...

项目部署到Linux上时遇到的错误(Redis,MySQL,无法正确连接,地址占用问题)

Redis无法正确连接 在运行jar包时出现了这样的错误 查询得知问题核心在于Redis连接失败&#xff0c;具体原因是客户端发送了密码认证请求&#xff0c;但Redis服务器未设置密码 1.为Redis设置密码&#xff08;匹配客户端配置&#xff09; 步骤&#xff1a; 1&#xff09;.修…...

dify打造数据可视化图表

一、概述 在日常工作和学习中&#xff0c;我们经常需要和数据打交道。无论是分析报告、项目展示&#xff0c;还是简单的数据洞察&#xff0c;一个清晰直观的图表&#xff0c;往往能胜过千言万语。 一款能让数据可视化变得超级简单的 MCP Server&#xff0c;由蚂蚁集团 AntV 团队…...

短视频矩阵系统文案创作功能开发实践,定制化开发

在短视频行业迅猛发展的当下&#xff0c;企业和个人创作者为了扩大影响力、提升传播效果&#xff0c;纷纷采用短视频矩阵运营策略&#xff0c;同时管理多个平台、多个账号的内容发布。然而&#xff0c;频繁的文案创作需求让运营者疲于应对&#xff0c;如何高效产出高质量文案成…...