当我们在使用电脑或者手机下载东西的时候我们经常会看到类似于下面的东西:

这个正在往前走的蓝色横线就是一个进度条,相信大家都不会很陌生,那么我们在Linux下进度条虽然没有这么好看,但是效果都一样哈。

那么问题来了我们自己要怎么设计一个进度条呢?
在写之前咱们先普及一点知识,我们都知道,Linux下有三种缓冲方式:
- 无缓冲:顾名思义,就是没有缓冲,只要你输入随即就会给你输出出来,典型代表就是stderr。
- 行缓冲:就是把一行数据写满,遇到换行才执行I/O操作,一般是1024个字节,典型代表就是键盘操作。
- 全缓冲:只有把缓冲区写满才会执行IO操作,典型代表就是磁盘读写。
而这次我们设计的进度条恰好使用的是printf函数,printf输出函数是一个行缓冲函数,先写到缓冲区,满足条件就将缓冲区刷到对应文件中。满足下列条件之一,缓冲区都会刷新:
(1)缓冲区填满
(2)写入的字符中有’\n’ ‘\r’
(3)调用fflush刷新缓冲区
(4)调用scanf从缓冲区获取数据时,也会刷新新缓冲区。
由于输出函数是行缓冲类型的。所以我们需要使用缓冲区刷新函数fflush来输出。否则我们看到的进度条将是一段一段输出的。
fflush:
fflush + 函数名, 清除读写缓冲区,需要立即把输出缓冲区的数据进行物理写入时。
fflush(stdin) 刷新标准输入缓冲区,把输入缓冲区里的东西丢弃[非标准]
fflush(stdout) 刷新标准输出缓冲区,把输出缓冲区里的东西打印到标准输出设备上
这里不能用\n 而要用\r:‘\n’表示的是换行,将光标指向下一行的开头位置。\r则是每次回到行首。
下面我们看看普通进度条的代码:
1 #include <stdio.h>
2 #include <unistd.h>
3 #include <string.h>
4 int main()
5 {
本文介绍了如何在Linux环境下设计进度条,包括普通进度条和彩色进度条。通过理解Linux的缓冲方式,特别是printf作为行缓冲函数的工作原理,利用fflush函数控制输出。对于彩色进度条,通过特定的转义序列设置字符颜色和状态,实现了视觉效果更佳的进度条。
最低0.47元/天 解锁文章
237

被折叠的 条评论
为什么被折叠?



