【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.问题现象 虚拟机打开后,使用ifconfig查看IP信息,虚拟机默认的网卡名称是ens33,ifconfig没有看到相关问题,远程连接工具Xshell也不能正常访问该虚拟机。 [rootnode1 ~]# ifconfig lo: flags73<UP,LOOPBACK,RUNNING> mtu…...
WEB攻防-通用漏洞-文件上传-js验证-MIME验证-user.ini-语言特征
目录 定义 1.前端验证 2.MIME验证 3.htaccess文件和.user. ini 4.对内容进行了过滤,做了内容检测 5.[ ]符号过滤 6.内容检测php [] {} ; 7.()也被过滤了 8.反引号也被过滤 9.文件头检测 定义 文件上传漏洞是指攻击者上传了一个可执行文件(如木马…...
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的锁有哪些种类 全局锁, 通过flush tables with read lock 应用场景是全局备份,备份的时候如果有两个表,备份 先备份了用户表,然后用户了商品,再备份商品表 那么商品表库存减少了,然而用户表的育儿…...
支持最新 mysql9的workbench8.0.39 中文汉化教程来了
之前在 B 站上发布了 mysql8 workbench 汉化教程,一年多来帮助很多初学者解决了不熟悉英文的烦恼。 汉化视频可以访问: 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的字符串,现在要求你去除所有重复的字母,并将剩下的字母按从小到大的次序输出。 如输入baaadccaab,输出abcd。 输入格式 第一行一个整数n,表示字符串长度(0<n&…...
基于STM32F103控制L298N驱动两相四线步进电机
文章目录 前言一、模块参数二、接口说明三、准备工作四、直流电机驱动引脚接线效果展示 五、两相四线步进电机驱动步进电机相关概念拍数驱动时序引脚接线效果展示 六、参考示例 前言 L298N 是一种常见的双 H 桥电机驱动模块,广泛用于驱动直流电机和步进电机。它基于…...
libreoffice在Windows和Linux环境的安装和结合Springboot使用教程
前言: 在公司做开发时,遇到一个需求,要求上传的文件有图片,也有word和pdf。预览信息时,既要求能水印展示出来,又要求能大图水印预览。思索许久,我决定采取全部打水印然后转成图片Base64&#x…...
前端开发 -- 自动回复机器人【附完整源码】
一:效果展示 本项目实现了一个简单的网页聊天界面,用户可以在输入框中输入消息,并点击发送按钮或按下回车键来发送消息。机器人会根据用户发送的消息内容,通过关键字匹配来生成自动回复。 二:源代码分享 <!DOCTYP…...
vue+echarts实现疫情折线图
效果: 代码: <<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:科目列表 功能2:条件查询 功能3:分页查询 功能4:excel批量导入 功能5:修改 功能6:删除...
vue3配置caddy作为静态服务器,在浏览器地址栏刷新出现404
vue3配置caddy作为静态服务器,在浏览器地址栏刷新出现404 1 情况描述2 原因3 配置 1 情况描述 在vue打包之后,形成dist文件,采用caddy作为静态资源服务器。在浏览器中输入域名时可以访问网站,但是,进过路由导航栏内部…...
深入理解委托:C# 编程中的强大工具
在面向对象编程中,委托(Delegate) 是一个非常强大且灵活的概念,特别是在 C# 编程语言中。它不仅仅是函数指针的替代品,还提供了更高层次的抽象,使得代码更加简洁、灵活和可维护。在这篇博客中,我…...
【Java 数据结构】合并两个有序链表
🔥博客主页🔥:【 坊钰_CSDN博客 】 欢迎各位点赞👍评论✍收藏⭐ 目录 1. 题目 2. 解析 3. 代码实现 4. 小结 1. 题目 将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示…...
测试微信模版消息推送
进入“开发接口管理”--“公众平台测试账号”,无需申请公众账号、可在测试账号中体验并测试微信公众平台所有高级接口。 获取access_token: 自定义模版消息: 关注测试号:扫二维码关注测试号。 发送模版消息: import requests da…...
在鸿蒙HarmonyOS 5中实现抖音风格的点赞功能
下面我将详细介绍如何使用HarmonyOS SDK在HarmonyOS 5中实现类似抖音的点赞功能,包括动画效果、数据同步和交互优化。 1. 基础点赞功能实现 1.1 创建数据模型 // VideoModel.ets export class VideoModel {id: string "";title: string ""…...
《Playwright:微软的自动化测试工具详解》
Playwright 简介:声明内容来自网络,将内容拼接整理出来的文档 Playwright 是微软开发的自动化测试工具,支持 Chrome、Firefox、Safari 等主流浏览器,提供多语言 API(Python、JavaScript、Java、.NET)。它的特点包括&a…...
java调用dll出现unsatisfiedLinkError以及JNA和JNI的区别
UnsatisfiedLinkError 在对接硬件设备中,我们会遇到使用 java 调用 dll文件 的情况,此时大概率出现UnsatisfiedLinkError链接错误,原因可能有如下几种 类名错误包名错误方法名参数错误使用 JNI 协议调用,结果 dll 未实现 JNI 协…...
linux 错误码总结
1,错误码的概念与作用 在Linux系统中,错误码是系统调用或库函数在执行失败时返回的特定数值,用于指示具体的错误类型。这些错误码通过全局变量errno来存储和传递,errno由操作系统维护,保存最近一次发生的错误信息。值得注意的是,errno的值在每次系统调用或函数调用失败时…...
解决本地部署 SmolVLM2 大语言模型运行 flash-attn 报错
出现的问题 安装 flash-attn 会一直卡在 build 那一步或者运行报错 解决办法 是因为你安装的 flash-attn 版本没有对应上,所以报错,到 https://github.com/Dao-AILab/flash-attention/releases 下载对应版本,cu、torch、cp 的版本一定要对…...
Kubernetes 网络模型深度解析:Pod IP 与 Service 的负载均衡机制,Service到底是什么?
Pod IP 的本质与特性 Pod IP 的定位 纯端点地址:Pod IP 是分配给 Pod 网络命名空间的真实 IP 地址(如 10.244.1.2)无特殊名称:在 Kubernetes 中,它通常被称为 “Pod IP” 或 “容器 IP”生命周期:与 Pod …...
保姆级【快数学会Android端“动画“】+ 实现补间动画和逐帧动画!!!
目录 补间动画 1.创建资源文件夹 2.设置文件夹类型 3.创建.xml文件 4.样式设计 5.动画设置 6.动画的实现 内容拓展 7.在原基础上继续添加.xml文件 8.xml代码编写 (1)rotate_anim (2)scale_anim (3)translate_anim 9.MainActivity.java代码汇总 10.效果展示 逐帧…...
Neko虚拟浏览器远程协作方案:Docker+内网穿透技术部署实践
前言:本文将向开发者介绍一款创新性协作工具——Neko虚拟浏览器。在数字化协作场景中,跨地域的团队常需面对实时共享屏幕、协同编辑文档等需求。通过本指南,你将掌握在Ubuntu系统中使用容器化技术部署该工具的具体方案,并结合内网…...
企业大模型服务合规指南:深度解析备案与登记制度
伴随AI技术的爆炸式发展,尤其是大模型(LLM)在各行各业的深度应用和整合,企业利用AI技术提升效率、创新服务的步伐不断加快。无论是像DeepSeek这样的前沿技术提供者,还是积极拥抱AI转型的传统企业,在面向公众…...
