Linux下实现单色和彩色进度条

本文介绍了如何在Linux环境下设计进度条,包括普通进度条和彩色进度条。通过理解Linux的缓冲方式,特别是printf作为行缓冲函数的工作原理,利用fflush函数控制输出。对于彩色进度条,通过特定的转义序列设置字符颜色和状态,实现了视觉效果更佳的进度条。
摘要由CSDN通过智能技术生成

当我们在使用电脑或者手机下载东西的时候我们经常会看到类似于下面的东西:
在这里插入图片描述
这个正在往前走的蓝色横线就是一个进度条,相信大家都不会很陌生,那么我们在Linux下进度条虽然没有这么好看,但是效果都一样哈。
在这里插入图片描述
那么问题来了我们自己要怎么设计一个进度条呢?

在写之前咱们先普及一点知识,我们都知道,Linux下有三种缓冲方式:

  1. 无缓冲:顾名思义,就是没有缓冲,只要你输入随即就会给你输出出来,典型代表就是stderr。
  2. 行缓冲:就是把一行数据写满,遇到换行才执行I/O操作,一般是1024个字节,典型代表就是键盘操作。
  3. 全缓冲:只有把缓冲区写满才会执行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 {                                                                                              
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值