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

Linux下的简单进度条程序

目录

缓冲区

程序实现步骤:

1、编写make指令

2、实现具体代码​编辑​编辑


缓冲区

   Linux下设计缓冲区的核心目的是解决 “速度不匹配” 问题,通过在不同速度的设备 / 模块之间加入 “暂存层”,优化数据传输效率、降低资源开销,最终提升整个系统的性能与稳定性。

   直接向屏幕(属于慢速 IO 设备)写入数据效率很低。缓冲区会先暂存数据,等满足特定条件时再一次性写入屏幕,减少 IO 操作次数,提升程序运行速度。(空间换时间)

   例如:

                           

   在Linux上运行上面两个代码可以看到下面的立刻就打印出来hello,而上面的则是过了一段时间后才打印。这是因为打印的内容并不是一开始就输入到屏幕文件中,而是先输入到缓冲区中。而换行符 '\n' 具备刷新缓冲区的功能,故下面才能立刻将打印内容输入到屏幕中。

   缓冲区刷新的三个条件:

  1. 遇到换行符 \n:这是行缓冲模式的核心特性,只要输出中包含\n,缓冲区会立即将当前内容刷新到屏幕
  2. 调用 fflush(stdout):这是强制刷新的函数,无论缓冲区是否满、是否有\n,都会立即将缓冲区内容写入屏幕。
  3. 缓冲区已满或程序结束:当缓冲区存储的数据达到上限(通常是 4096 字节),或程序正常退出(执行到return 0)时,缓冲区也会自动刷新

程序实现步骤:

1、编写make指令

   先明确一下我们实现进度条程序的过程步骤:首先,我们采用多文件的形式--这意味着需要实现编译链接多个文件;其次,清理工作必不可少。

   先依照实现目标的中间过程来编写make指令(就是怎么处理那些代码文件什么的),把那些需要反复使用的指令编写出make指令减少开发负担。

   稍微解释一下make的逻辑:因为要将多个源文件(.c)编译为.o文件后再进行链接(.h头文件 gcc自动动态链接)。故先用SRC确定文件中所有的.c 文件,用OBJ提前确定所有.c文件经gcc -c编译后的.o文件(只是提前知道名字,并不会执行编译)。再将.c文件全部gcc -c 编译为.o文件,最后将所有的.o文件链接到一起。

2、实现具体代码

   我这只是简单模拟一下进度条,这次主要的目的是掌握Linux上的简单程序编写过程,对于进度条程序的编写到是其次的。

注意事项:

   1.用宏定义来确定某些值,当其需要改动的时候只需要改动宏就行。

   2.进度条的推进需要不断刷新缓冲区,如果使用换行符刷新就不符合实际,这时候就用函数fflush(stdout)来刷新缓冲区。

   3.每次刷新的时候进度条都要进行回车(\r),并且是左对齐。

   4.进度条需要一个不断变化的光标来判断程序是否卡死

   5.因为上面是模拟了网络波动下载速度并不确定的情况,故当循环内计算下载量大于下载包大小时需要将下载量改为总包大小(上面偷懒了没改),以及将下载百分比改为100%

   另外还需要注意的是:如果每次while循环末不增加usleep让其“休息一下”的话光标会因为节奏过快导致终端来不及反应导致光标乱跳,增加usleep降低了进度条的更新频率,给终端足够的时间处理光标定位和内容刷新。

http://www.dtcms.com/a/561112.html

相关文章:

  • 【ComfyUI】Stable Zero123 单图生成3D视图
  • 今日策略:年化398%,回撤11%,夏普5.0 | 金融量化多智能体架构方案
  • 16-Redis 消息通知实战指南:任务队列与发布订阅模式全解析
  • 江苏网站建设效果个人微信小程序免费制作
  • 佛山网站优化怎么做网站空间商那个好
  • JavaSe—集合框架、Collection集合
  • 面试redis篇———缓存击穿和缓存雪崩问题及解决策略
  • Redis Stream:高效的消息队列解决方案
  • 杭州设计门户网站中文搜索引擎有哪些平台
  • 【操作系统】408核心考点深度解析|进程通信:三大机制(共享存储/消息传递/管道)详解与对比
  • 长沙网站建立公司网站规范化建设
  • 基于微信小程序的防诈骗管理系统
  • 孤能子视角:EIS六线分析之“王东岳递弱代偿理论“
  • RHCE第五次作业
  • 差分隐私:机器学习和数据发布中的隐私守护神
  • GEO实战:如何让AI正确理解你的专业服务?
  • ARM《9》_在linux中编写内核模块(单.c文件、多.c文件)、内核模块传参(传参、回调)、内核模块互调
  • 兴安盟网站建设桂林软件开发公司
  • 输入关键词自动生成文章宁波seo排名优化教程
  • 【Android Activity】生命周期深入理解
  • 哪些资产最适合RFID技术管理?
  • 如何做网站的书籍建设部网站 专业评估
  • 网站排名下降东莞纸箱定制 技术支持 东莞网站建设
  • 组合数学第六章 容斥定理
  • vscode 安装Jupiter以后,终端无法切换conda环境了
  • 潍坊网站制作最低价格wordpress现在还慢吗
  • 785.力扣LeetCode_ 判断二分图
  • 如何使用表格做网站百度开户推广
  • Go语言设计模式:抽象工厂模式详解
  • 网站建设 东营远见网络公司做电脑网站步骤