linux下进度条的实现及其理论思想

来源:互联网 发布:什么是虚拟专用网络 编辑:程序博客网 时间:2024/06/03 13:15

在编写进度条之前我们需要先了解一下进度条的实现原理,printf函数缓冲区问题以及 \n与\r的区别。

首先:进度条的实现原理:

             通过增加字符来保证进度的增加。所以我们给定一个102的定长数组(下标从0到101),0号下标不使用,1到100表示进度,101号表示进度条完成时的结束标志(C语言中字符串结束符是\0)。打印进度条时,只打印一行,并且是递增 形式的打印,所以需要回到当前行的起始位置并且实时刷新打印,此时就涉及到\r以及缓冲区的问题。

其次:\n与\r:

            \n:换行符+回车

            \r:回车符

最后:printf缓冲区:

       输出到屏幕相当于访问外设,而外设的速度和内存的速度是相差甚远的,如果每次输出都直接去访问外设,一定会造成效率的下降。所以,printf设置了三种缓冲方式。
      1.全缓冲,即整个缓冲区满才会输出到外设。
      2.行缓冲,即写满一行输出到外设,即遇到\n,
      3.无缓冲,不用等待,实时的输出。

      进度条需要实时显示当前状态,即采用无缓冲方式,此时就要使用fflush函数来实现。

下面是linux下进度条的简单实现:

运行结果如下图:


0 0
原创粉丝点击