Linux:进度条编写

前置知识

回车与换行

换行就是相当于vim中的命令模式的j。让光标直接向下一行。

回车则是相当于vim中的^,回到行头。

因此像c语言中的\n其实执行了回车与换行两个动作

缓冲区

讲缓冲区概念前,我们先编写一个简单的程序:

简单运行一下:

当然没什么问题。

这时候我们再将\n去掉看看效果:


这时候我们竟然是先休眠再打印,莫非是先执行sleep再执行printf?

答案是必不可能,c语言一定是从上至下执行语句的。

根本原因是,printf确实执行完毕了,但是放在内存的缓冲区当中。

只有当缓冲区刷新的时候,内容才会打印到屏幕上。

缓冲区在以下几种情况下会刷新:

  1. \n
  2. 缓冲区满了
  3. 程序结束
  4. fflush强制刷新

fflush

fflush是c语言中一个函数,我们来man一下看看其成分:

注意到,fflush传入的参数是FILE *stream

这时我们就又要提到一个小知识了,c语言会默认帮我们打开三个文件流:stdin、stdout、stderr。

前者是键盘,后两者是显示器。

因此我们传入stdout即可刷新缓冲区:

完美达到效果了呢!

倒计时

有了前面的知识储备,我们可以先写一个简单的倒计时程序来练练手:

效果如下:

amazing ah!

进度条

好了,现在开始正式进入我们的进度条编写。

首先我们先创建所需的文件:Proccess.c Proccess.h Main.c makefile

首先我们要明确一下进度条使用的场景,像下载情景。当然我们现在还未接触网络,因此可以模拟一个下载场景:

那么现在我们只需要实现一个简易的进度条即可:

来尝试简单调用一下:


完美依照预期进行了

颜色优化

我们打印的这个进度条多少有点简陋了,可以用一些颜色块代替:

效果如下:

相关推荐
杨云龙UP4 小时前
MySQL 数据库常用备份工具对比:mysqldump、mydumper 与 XtraBackup
linux·运维·服务器·数据库·mysql·dba·备份恢复
风曦Kisaki6 小时前
Kubernetes(K8s)笔记Day06: 持久化存储(emptyDir,hostPath,NFS),PV 和 PVC,StorageClass存储类
linux·运维·笔记·云原生·容器·kubernetes
_艾伦 耶格尔.6 小时前
基础I/O
linux
fb_123459 小时前
Linux磁盘分区从入门到实操:MBR_GPT全解析+分区工具实战指南
java·linux·gpt
深念Y9 小时前
随身WiFi设备记录
linux·嵌入式·无线·射频·随身wifi·zte
柒号华仔10 小时前
【LINUX】Linux从闹钟到高精度定时器的实现
linux
深爱水瓶 血影S狂风13 小时前
函数调用过程探究
linux·运维·服务器
酷可达拉斯13 小时前
Linux操作系统-磁盘空间使用率100%如何处理?
linux·运维·服务器·云计算·bash
AIgorithmGEEK14 小时前
Linux 权限管理:从「Permission Denied」到「畅行无阻」
linux·权限·chmod·粘滞位·umask·文件权限的构成
BullSmall14 小时前
scanoss-engine 本地最简部署 & 扫描命令(Linux/Anolis OS)
linux·运维·服务器