行业知识
Linux小程序——进度条
前言:哈喽小伙伴们,���过我们对多个Linux基本开发工具的学习之后,对于Linux的使用也算是更上一层楼。
所以这篇文章,我们就尝试使用我们学过的Linux知识来写一个小程序——进度条,达到实践以及加深知识映像的效果。
目录
一.什么是进度条
二.缓冲区
三.简易倒计时
四.进度条
五.完整代码展示
1.Progressbar.h
2.Progressbar.c
总结
一.什么是进度条
进度条相信大家都不陌生,平时玩游戏的时候都会有数据加载进度条。那么你知道进度条的原理是什么吗???
我们先来认识两个符号:
\n:换行符,从头开始另起一行
\r:回车符,使光标回到本行的开头
二.缓冲区
首先我们要知道,在程序文件的加载过程中,不是一路顺风的,经常会出现卡顿和进度突然变快和变慢的情况,这就要关系到缓冲区的概念了。
大家一定都认识sleep()睡眠函数,使用它需要包含头文件#include,它的作用是能够让程序在某个位置停留一定时间后再继续运行,下面我们就来展示一下:
我们设置睡眠时间为3秒,然后运行:
能够看出,printf函数打印完之后,程序并没有立刻停止,而是停留了一段时间再结束。
现在同样的代码,我只修改一个地方:将“\n”换行符去掉,我们在运行一次:
会发现初始的时候什么都没有,过3秒之后才将结果打印并退出。
这是为什么呢???
实际上,我们的printf函数所输出的数据一开始是存放在缓冲区的,缓冲区里的数据会在程序结束时才会被冲刷并打印在显示器上,而这里的sleep函数的作用就是让程序睡眠一定时间后再终止,所以“hello linux”才会过3秒后才打印。
但是有一种特殊情况就是“\n”,它能够立即刷新一次缓冲区,从而让包括它在内的之前的所有数据立即打印。
除此了“\n”之外,还有一个函数可以主动冲刷缓冲区,它就是fflush(),给他传入形参stdout:
三.简易倒计时
学习完缓冲区的知识之后,我们就能够制作一个简易的倒计时了,直接来看代码:
通过while循环打印,我们使用\r回车符,每打印一次之后就让光标回到行头,但是这样会造成覆盖,导致我们的倒计时无法显示,所以我们需要使用fflush强制将倒计时打印出来,并使用sleep使打印的间隔为1秒,实现倒计时:
由于不方便录视频,所以我们展示两张截图作为参考。
四.进度条
在linux写一个独立项目,我们同样需要按照C/C++的方式来,一个头文件,两个源文件:
唯一值得注意的是,这次我们要多写一个makefile文件,帮助我们执行指令。
想要多文件同时操作,不要忘记vim的操作方式:在底行模式下输入vs + 文件名,再通过ctrl+ww,可以使光标在不同文件中移动。
下面我们通过一步一步分析来写代码,完成进度条的制作过程:
我们要先将所有文件的基本代码编写完成:
并进行测试:
确认无误后,我们就可以只对Progressbar.h和Progressbar.c两个文件进行编辑了。
首先我们要知道,进度条基本都是通过特殊字符来表示的,这里我们用‘#’字符来当做进度条。
其次,进度条的加载过程,就像上边的倒计时一样需要循环,而且字符是逐渐增加的,这样我们就可以考虑使用字符数组了。如果是100%加载的话,那么数组的长度就要是100。
那么为了方便日后我们更换进度条的符号以及数组的大小,我们都使用宏定义:
#define type #
#define Length 100
创建完数组之后,如果我们不初始化的话,则会默认附随机值,影响我们打印,所以我们可以使用memset将数组元素均赋值为‘\0’,使用memset需要头文件#include:
char bar[length];
memset(bar,'\0',sizeof(bar));
随后我们就可以进行循环打印:
int count = 0;while(count
下一篇:vps怎么建mc服务器?