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

【Linux】进度条

本文中,我们来写一个进度条。

本文大纲:

写一个命令行版的进度条。

1.回车换行

2.缓冲区问题(本文不深究)

​ 2.1测试代码

3.写一个什么样的进度条?

​ version1

​ version2

回车换行

这俩不是一个概念:

在计算机语言中,换行是\n,回车是\r。\n\r是回车换行。

如果改成这样:

我们就会发现,等待3秒后才会打印出来。

那么,先执行的是printf,还是sleep呢?

我们的程序永远都是从前往后执行的。

为什么printf执行完了显示器没有显示?在我们休眠的时间里,我们的字符串在哪?

在缓存区里。

那为什么有’\n’,就能先打印出来呢?

因为行刷新

而我们没有’\n’,是因为程序结束了会自动刷新缓冲区。

如果我们想让不带’\n’的自动刷新呢?

fflush

我们的程序会自动打开这三个流。

stdin是键盘。stdout和stderr是显示器。

我们知道,linux下一切皆文件,printf是往stdout里写入。

所以我们也可以加一个参数,然后写成fprintf版本:

使用fflush:

测试代码:

如果我们想在同一个位置打印呢?那就不能让它换行了。

光标的位置永远是输入下一个字符的位置。

所以我们这样修改:

这里,如果我们把i定义为10,就会发现:

倒计时到1的时候显示的是:

理解显示

当我们在屏幕上打印12345时,打印的是整数12345,还是字符’1’‘2’‘3’‘4’'5’呢?

答案是后者。

**显示器只认字符!**所以我们说,显示器是字符设备

这也是为什么平时printf时,要格式化输出。

比如我们int a;,printf内部把我们的a由整数转成字符串,然后再由类似putc这样的接口把字符一个个显示出来。

我们这样修改:

怎么理解这个%2d呢?

这代表位宽为2,一次显示两个字符,如果只有一个字符,会把后面的字符清理掉,可以理解为显示的是02或者空格2.

我们还可以改成,让数字靠屏幕左侧显示:

这样修改,表示左对齐。

写一个什么样的进度条?

左侧的这个中括号里面,随着右侧中括号里的百分比增加,井号增加(但不会讲右侧中括号向后挤),同时最右侧的中括号中/进行旋转。

原理版本(version1)

用sleep会太慢了,所以我们改用usleep:

微秒

1s=100w微秒

我们可以先写出井号部分的中括号:

然后再写出百分比的中括号:

旋转光标

我们将这4个字符覆盖式地显示:| / - \\,就可以得到我们想要的效果。

\\是因为要取字面值,才能得到我们想要的\

然后我们可以比较巧妙地这样来显示:

这个进度条可以跑了,但是没法使用。

如果未来我们是在下载东西的时候打印进度条:

这样进度条的进度与我们的下载进度不符。

真实版本

应该是边下载边更新。

所以我们接下来把process.h改成:

然后我们再来写process.c

然后会看到报错:

所以我们要这样:

然后我们就可以得到:

然后我们发现没到100,需要改一下这里:

最后修改

我们最后将其改为回调函数形式的,更好:

Thanks♪(・ω・)ノ

相关文章:

【Linux】进度条

本文中,我们来写一个进度条。 本文大纲: 写一个命令行版的进度条。 1.回车换行 2.缓冲区问题(本文不深究) ​ 2.1测试代码 3.写一个什么样的进度条? ​ version1 ​ version2 回车换行 这俩不是一个概念&…...

【zookeeper核心源码解析】第四课:客户端与服务端读写的io核心流程

系列文章目录 【zookeeper核心源码解析】第一课:zk启动类核心流程序列图 【zookeeper核心源码解析】第二课:俯瞰QuorumPeer启动核心流程,实现选举关键流程 【zookeeper核心源码解析】第三课:leader与follower何时开始同步&#…...

强化学习蘑菇书笔记

绪论 强化学习就是一个智能体在一个不确定的环境中最大化它的奖励。智能体在一个环境中获取某个状态后,做一个动作,也称为决策,在环境中执行这个决策以后,会有一个奖励。尽可能多地获得更多的奖励。 强化学习概述 强化学习与监…...

《机器学习》——线性回归模型

文章目录 线性回归模型简介一元线性回归模型多元线性回归模型误差项分析一元线性模型实例完整代码 多元线性模型实例完整代码 线性回归模型简介 线性回归是利用数理统计中回归分析,来确定两种或两种以上变量间相互依赖的定量关系的一种统计分析方法。 相关关系&…...

Linux(Centos 7.6)网卡信息没有了问题处理

1.问题现象 虚拟机打开后&#xff0c;使用ifconfig查看IP信息&#xff0c;虚拟机默认的网卡名称是ens33&#xff0c;ifconfig没有看到相关问题&#xff0c;远程连接工具Xshell也不能正常访问该虚拟机。 [rootnode1 ~]# ifconfig lo: flags73<UP,LOOPBACK,RUNNING> mtu…...

WEB攻防-通用漏洞-文件上传-js验证-MIME验证-user.ini-语言特征

目录 定义 1.前端验证 2.MIME验证 3.htaccess文件和.user. ini 4.对内容进行了过滤&#xff0c;做了内容检测 5.[ ]符号过滤 6.内容检测php [] {} ; 7.()也被过滤了 8.反引号也被过滤 9.文件头检测 定义 文件上传漏洞是指攻击者上传了一个可执行文件&#xff08;如木马…...

mybatis-plus代码生成器

<!--mybatis-plus--><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.5.2</version></dependency><!--mybatis-plus-generator 生成器--><depende…...

12.24-12.28Mysql锁阅读笔记

1.Mysql的锁有哪些种类 全局锁&#xff0c; 通过flush tables with read lock 应用场景是全局备份&#xff0c;备份的时候如果有两个表&#xff0c;备份 先备份了用户表&#xff0c;然后用户了商品&#xff0c;再备份商品表 那么商品表库存减少了&#xff0c;然而用户表的育儿…...

支持最新 mysql9的workbench8.0.39 中文汉化教程来了

之前在 B 站上发布了 mysql8 workbench 汉化教程&#xff0c;一年多来帮助很多初学者解决了不熟悉英文的烦恼。 汉化视频可以访问&#xff1a; 2024最新版mysql8.0.39中文版mysql workbench汉化 中文升级 旧版汉化报错解决_哔哩哔哩_bilibili MySql Workbench汉化_哔哩哔哩_…...

golang连接jenkins构建build

1.安装jenkins依赖 go get github.com/bndr/gojenkins2.代码 import ("context""file/utils/logs""github.com/bndr/gojenkins""github.com/gin-gonic/gin""net/http""time" )// 接收单个静态文件上线参数 type…...

SCAU高程进阶题(自用)

18711 字符串去重 Description 一个完全由小写字母组成的长度为n的字符串&#xff0c;现在要求你去除所有重复的字母&#xff0c;并将剩下的字母按从小到大的次序输出。 如输入baaadccaab&#xff0c;输出abcd。 输入格式 第一行一个整数n&#xff0c;表示字符串长度(0<n&…...

基于STM32F103控制L298N驱动两相四线步进电机

文章目录 前言一、模块参数二、接口说明三、准备工作四、直流电机驱动引脚接线效果展示 五、两相四线步进电机驱动步进电机相关概念拍数驱动时序引脚接线效果展示 六、参考示例 前言 L298N 是一种常见的双 H 桥电机驱动模块&#xff0c;广泛用于驱动直流电机和步进电机。它基于…...

libreoffice在Windows和Linux环境的安装和结合Springboot使用教程

前言&#xff1a; 在公司做开发时&#xff0c;遇到一个需求&#xff0c;要求上传的文件有图片&#xff0c;也有word和pdf。预览信息时&#xff0c;既要求能水印展示出来&#xff0c;又要求能大图水印预览。思索许久&#xff0c;我决定采取全部打水印然后转成图片Base64&#x…...

前端开发 -- 自动回复机器人【附完整源码】

一&#xff1a;效果展示 本项目实现了一个简单的网页聊天界面&#xff0c;用户可以在输入框中输入消息&#xff0c;并点击发送按钮或按下回车键来发送消息。机器人会根据用户发送的消息内容&#xff0c;通过关键字匹配来生成自动回复。 二&#xff1a;源代码分享 <!DOCTYP…...

vue+echarts实现疫情折线图

效果&#xff1a; 代码&#xff1a; <<template><div><div id"left1" style "height:800px;width:100%"></div></div> </template><script> //疫情数据//export default {data() {return {data:{//疫情数据…...

服务器nfs文件共享

1. 配置 NFS 服务器(NFS Server) 在 Ubuntu/Debian 上: sudo apt update sudo apt install nfs-kernel-server在 CentOS/RHEL 上: sudo yum install nfs-utils1.2 创建共享目录 选择一个要共享的目录,并确保该目录的权限正确设置。例如,假设我们要共享 /srv/nfs 目录…...

基于Vue+SSM+SpringCloudAlibaba的科目课程管理系统

功能1&#xff1a;科目列表 功能2&#xff1a;条件查询 功能3&#xff1a;分页查询 功能4&#xff1a;excel批量导入 功能5&#xff1a;修改 功能6&#xff1a;删除...

vue3配置caddy作为静态服务器,在浏览器地址栏刷新出现404

vue3配置caddy作为静态服务器&#xff0c;在浏览器地址栏刷新出现404 1 情况描述2 原因3 配置 1 情况描述 在vue打包之后&#xff0c;形成dist文件&#xff0c;采用caddy作为静态资源服务器。在浏览器中输入域名时可以访问网站&#xff0c;但是&#xff0c;进过路由导航栏内部…...

深入理解委托:C# 编程中的强大工具

在面向对象编程中&#xff0c;委托&#xff08;Delegate&#xff09; 是一个非常强大且灵活的概念&#xff0c;特别是在 C# 编程语言中。它不仅仅是函数指针的替代品&#xff0c;还提供了更高层次的抽象&#xff0c;使得代码更加简洁、灵活和可维护。在这篇博客中&#xff0c;我…...

【Java 数据结构】合并两个有序链表

&#x1f525;博客主页&#x1f525;&#xff1a;【 坊钰_CSDN博客 】 欢迎各位点赞&#x1f44d;评论✍收藏⭐ 目录 1. 题目 2. 解析 3. 代码实现 4. 小结 1. 题目 将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示…...

Z-Image Turbo保姆级教学:CPU Offload显存管理技巧

Z-Image Turbo保姆级教学&#xff1a;CPU Offload显存管理技巧 你是不是也遇到过这种情况&#xff1a;好不容易找到一个好用的AI绘画模型&#xff0c;兴致勃勃地想在本地跑起来&#xff0c;结果刚点生成&#xff0c;程序就崩溃了&#xff0c;屏幕上弹出一行冰冷的“CUDA out o…...

CSS如何优化大型网站样式_利用BEM架构保持代码条理性

BEM通过命名约束避免样式冲突和维护灾难&#xff1a;Block&#xff08;如card&#xff09;为独立单元&#xff0c;Element&#xff08;如card__title&#xff09;须依附Block&#xff0c;Modifier&#xff08;如card--featured&#xff09;表状态且不单独使用。为什么BEM能避免…...

OpenClaw配置备份方案:Qwen3.5-9B模型迁移无忧指南

OpenClaw配置备份方案&#xff1a;Qwen3.5-9B模型迁移无忧指南 1. 为什么需要OpenClaw配置备份 上周我的MacBook突然黑屏送修&#xff0c;维修人员告诉我主板需要更换。那一刻我突然意识到&#xff1a;过去三个月精心调校的OpenClaw配置可能面临灭顶之灾。特别是那个与Qwen3.…...

09 华夏之光永存:带领华为盘古大模型走向世界巅峰

09 华夏之光永存&#xff1a;带领华为盘古大模型走向世界巅峰 小标题&#xff1a;鸿蒙生态深度协同&#xff1a;端侧大模型原生融合方案 文章摘要 本文作为系列专栏第九篇&#xff0c;聚焦华为盘古大模型与鸿蒙生态端侧原生适配、端边云全域协同核心痛点&#xff0c;针对当前端…...

基于核密度估计的CNN-LSTM-Attention-KDE多输入单输出回归模型【MATLAB】

基于核密度估计的CNN-LSTM-Attention-KDE多输入单输出回归模型 在深度学习时间序列预测与回归分析中&#xff0c;传统的模型往往只能给出一个确定的“点预测”结果&#xff08;例如&#xff1a;预测明天的温度是25度&#xff09;。然而&#xff0c;在许多高风险的工程和金融场景…...

SpringBoot集成Flyway:从多数据库适配到生产环境实战

1. 为什么你的微服务需要Flyway&#xff1f; 第一次遇到数据库迁移问题是在2018年&#xff0c;当时我们团队维护着一个需要同时支持MySQL和Oracle的SaaS产品。每次发版前&#xff0c;DBA都要手动执行几十个SQL脚本&#xff0c;经常出现测试环境执行成功但生产环境漏掉某个脚本的…...

嵌入式工程师成长之路(1)——元件基础(完整版)

点击下面图片带您领略全新的嵌入式学习路线 🔥爆款热榜 88万+阅读 1.6万+收藏 文章目录 前言 一、认识元件 ①、认识元件 ②、认识封装 二、电阻 1.上拉电阻与下拉电阻 ①、定义 ②、应用 ③、阻值选择 ④、因上下拉电阻引发的问题 ⑤、因一颗上拉电阻引发的思考 2.高精密采…...

OpenClaw隐私保护:千问3.5-9B本地化处理敏感数据方案

OpenClaw隐私保护&#xff1a;千问3.5-9B本地化处理敏感数据方案 1. 为什么我们需要本地化AI处理 去年处理一份投资协议时&#xff0c;我犯了个致命错误——将包含客户隐私条款的合同上传到某云端AI工具进行摘要生成。三天后&#xff0c;法务团队在公开搜索引擎的缓存记录中发…...

打字不如说话,说话不如截图——AI 代码助手的多模态输入实践偈

整体排查思路 我们的目标是验证以下三个环节是否正常&#xff1a; 登录成功时&#xff1a;服务器是否正确生成了Session并返回了包含正确 JSESSIONID的Cookie给浏览器。 浏览器端&#xff1a;浏览器是否成功接收并存储了该Cookie。 后续请求&#xff1a;浏览器在执行查询等操作…...

OpenClaw数据标注:Qwen3.5-9B-AWQ-4bit辅助制作AI训练数据集

OpenClaw数据标注&#xff1a;Qwen3.5-9B-AWQ-4bit辅助制作AI训练数据集 1. 为什么需要AI辅助数据标注 作为一个经常折腾个人机器学习项目的开发者&#xff0c;数据标注一直是我最头疼的环节。上周在做一个垃圾分类模型时&#xff0c;面对2000多张待标注的垃圾图片&#xff0…...