Linux下简单进度条的实现

首先呢,我给出代码和进度条效果图,后面来进行详解。

这里写图片描述

这里写图片描述
如上图所示,这进度条实现的也着实简单(略显尴尬),但进度条原理本质就是如此,只不过多了些修饰,下面来进行详解。
unistd.h是C、C++程序设计语言中提供对POSIX(可移植操作系统接口)操作系统API的访问功能的头文件的名称。
usleep函数是延时函数,单位为微秒。下面看个有趣的现象
这里写图片描述

看上面这段简单的代码,他实现的效果是先延迟三秒,然后屏幕显示“hello”。

这里写图片描述

再看这段代码,它的实现效果是屏幕先展示“hello”,然后延迟三秒再结束。不就多了个“\n”麽,咋结果不同呢?
这其中就涉及一个重要问题:缓冲机制。为了提高文件系统性能,内核利用一部分物理内存分配出缓冲区,用于缓冲系统操作和数据文件,当内核收到读写的请求时,内核先去缓冲区找是否有请求的数据,有就直接返回,如果没有则通过驱动程序直接操作磁盘。缓冲机制减少了系统调用次数,降低了CPU上下文切换和磁盘访问频率。
缓冲区分为无缓冲,行缓冲(按行刷新“\n”,显示器就是行缓冲),全缓冲(写满再刷新)。绝大多数流是完全缓冲的,这意味着读取和写入实际上是从一块被称为缓冲区的内存区域来回复制数据。从内存中来回复制数据是非常快速的。用于输出流的缓冲区只有当写满时才会被刷新(flush,物理输入)到设备或文件中。类似,输入缓冲区当它为空时通过从设备或文件读取下一块较大的输入,重新填充缓冲区。
而printf函数存在行缓冲机制,先把数据放入缓冲区然后再显示到屏幕上,如果加上“\n”就会立即显示在屏幕上,没有“\n”则先把数据放在缓冲区再缓停3秒显示在屏幕上。还有同种效果的一种方法是在printf函数后面立即调用fflush(stdout);fflush迫使缓冲区的数据立即写入,不管它是否已满。
这里写图片描述

你也可以对你的进度条进行修饰,如下图:
这里写图片描述

还有更漂亮的:
这里写图片描述
这里写图片描述
这个我能力有限,还未吃透,所以放这里仅供参考。这些是在bash中的。那个带底色的进度条就是根据这段代码改造生成的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值