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

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

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

来尝试简单调用一下:


完美依照预期进行了

颜色优化

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

效果如下:

相关推荐
AlanBruce2 小时前
摩尔信使MThings功能综述与应用使用指南
linux·自动化·plc·mthings·摩尔信使
陈陈CHENCHEN6 小时前
【Linux】服务器根目录磁盘扩容操作记录
linux·运维·服务器
GeW7 小时前
RHCE快速拿证全攻略:考点拆解+实验强化+时间规划,一次通关
linux
码农小韩8 小时前
Linux应用开发(八)——TCP/IP网络编程基础
linux·嵌入式软件开发·linux操作系统·嵌入式操作系统·linux网络编程·linux应用
迷途之人不知返8 小时前
【进程】-5-进程优先级
linux
fengyehongWorld9 小时前
Linux squid搭建基础代理服务器
linux·运维·服务器
木白CPP9 小时前
Linux DMA驱动详解(二)-----DMA的使用者
java·linux·运维
赵民勇10 小时前
systemd-socket-activate命令详解
linux·运维
Cx330❀10 小时前
【Linux网络】网络层 IP 协议:从网段划分到内核源码解析
大数据·linux·服务器·网络·tcp/ip·性能优化·langchain
企鹅的蚂蚁10 小时前
LubanCat RK3588 实时 Linux 开发(七):YT6801 PCIe 网卡驱动移植与 vermagic 排查
linux·rk3588·linux驱动·yt6801·pcie网卡·vermagic