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

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

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

来尝试简单调用一下:


完美依照预期进行了

颜色优化

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

效果如下:

相关推荐
大聪明-PLUS5 分钟前
我们如何分析原生应用程序(C++、Windows、Linux)的内存消耗?
linux·嵌入式·arm·smarc
麒qiqi33 分钟前
进程间通信(IPC):管道通信全解析
linux·运维·服务器
无奈笑天下1 小时前
银河麒麟V10虚拟机安装vmtools报错:/bin/bash解释器错误, 权限不够
linux·运维·服务器·开发语言·经验分享·bash
wdfk_prog2 小时前
[Linux]学习笔记系列 -- [fs]kernfs
linux·笔记·学习
代码游侠2 小时前
学习笔记——IO多路复用技术
linux·运维·数据库·笔记·网络协议·学习
比奇堡派星星2 小时前
Linux Hotplug 机制详解
linux·开发语言·驱动开发
m0_485614673 小时前
Linux-容器基础2
linux·运维·服务器
QT 小鲜肉3 小时前
【Linux命令大全】001.文件管理之mattrib命令(实操篇)
linux·运维·服务器·chrome·笔记
鸠摩智首席音效师3 小时前
如何在 Linux 上自动清理 Journalctl 日志 ?
linux·运维·服务器
鸠摩智首席音效师4 小时前
如何在 Linux 下以 www-data 用户运行 Crontab ?
linux·运维·服务器