使用工具的简单介绍:
在创建进度条之前,首先要明白两个工具,fflush 和 \r 。
\r
回车键的功能其实是两个,一个是换行,一个是回车。所谓换行就是将光标从这一行变到下一行中,且是垂直下落,除此之外光标位置不会有其他的移动。而回车就是回到当前行的最前端最开头位置。
在Linux系统中,换行和回车是并不是像键盘上的回车键一样合在一起使用,而是分别由两个命令控制着
\r,就是Linux中的回车,在Linux的文件文本中的作用是将光标移动到当前行的开头位置,即回车。它通常与\n(换行符)一起使用,表示换行并回到行首。
fflush :
fflush函数的作用是刷新缓冲区,将缓冲区中的数据立即写入到文件中。它可以用来确保数据被及时写入文件,而不是等到缓冲区满或程序结束时才写入。在Linux中,通常使用fflush(stdout) 将缓冲区的数据冲刷到显示器上,让数据显现。
倒计时的创建:
倒计时的工作原理:
倒计时指的是在一个位置上的数字随着光标的不断闪烁而不断的更新减小,直到为0。在如果要在Linux上实现倒计时,除了上述的两个工具外还需要额外了一个工具,sleep 休眠命令,休眠命令可以解决倒计时数字的停顿的问题。
利用缓冲区实现一个简单的倒计时,使用\r返回光标位置并清除缓冲区数据,但是使用fflush将缓冲区的数据提取到了显示器文件中。
单单只有\r是不行的,因为\r虽然把光标的位置进行了返回(输入一个数字光标会移动到下一个位置,但是\r会在移动下一个位置后会返回回去),但是会将数字从缓冲区中删除清空,导致在显示器中显示不出来,所以需要fflush进行提取
进度条的创建:
根据之前倒计时的操作,我们直到需要定义一块区域作为缓冲区,随后不断地更新和刷新缓冲区内部的数据,将其数据显示到显示屏上依次达到进度条不断地在更新进度,不断地在增长的效果。
同时,为了表示进度条不断地在增长,因此需要使用循环函数在缓冲区中不断地添加#来显示进度条的增长。
对于百分比数据,可以利用定义好的缓冲区大小来通过计算得到,在上图中,定义的百分比大小是101,其中的1表示的是最初始的数据,也就是 \0 来表达进度是0 ,所以只要按照#的个数来计算百分比的占比是多少。
同时为了保证进度条是一个不会因为进度的增长而不断变长,而是有一个固定长度的,所以使用%-100实现距离的扩充以及往右边增长进度的效果。
而百分比的数据则需要打印除#号的个数以及加上%即可完成,注意%符号在文件中需要两个%才能在显示屏上显示出来。
不同场景下、打印任意长度的进度条:
因为进度条是不会单独出现的,进度条要配合具体的场景使用,所以在此处我们建立一个文件下载进度的进度条。
即时打印当前时间下的进度条
测试效果:
、