1.操作过程
我们这个是实现一个进度条的程序,类似于下面的这个样子,但是效果肯定没有下面这个高级哈
我们的实现效果是这个样子的(动态的哈):
我们这个需要去进行一个文件系统的搭建,类似于我们进行这个C语言,C加加学习的时候这个既包含头文件,又包含源文件,还包含测试文件这样的多个文件组成的文件系统。使用我们之前介绍的这个makefile自动化构建工具,以及这个依赖关系和依赖方法等等加以运用;
进度条的英文我们翻译为processbar,我们创建这个源文件头文件的时候,都是以这个进行命名的,夏敏简单介绍一下这个操作的方法,顺便介绍一下这个缓冲区和换行的概念:
1.1创建文件夹
我们先去创建一个processbar的文件夹,这个文件夹就是我们将来要写程序的地方,创建完成这个文件夹之后,我们就进入这个对应的目录里面去;
1.2创建源文件和头文件
这个小程序里面,我们需要创建两个源文件,一个头文件,两个原文件就是main.c和processbar.c文件,一个头文件就是processbar.h文件;
现阶段这个processbar源文件用不上,所以里面没有填如任何内容,头文件就是包含以下这个标准库,以及这个prabma once是为了防止被重复的包含;
在main.c文件里面,我们首先就是包含这个头文件;
1.3自动化构建makefile
我们创建一个makefile文件,这个里面洗的内容就是这个依赖关系和这个依赖方法,以及这个文件的清除处理;
就是利用这个processbar文件依赖于两个源文件建立这个关系,为什么没有写这个头文件,因为我们的头文件就在当前的目录下面,而且我们的原文件里面也是包含了这个头文件的,这个时候不需要在依赖关系里面写出来这个头文件,编译的时候他会被自动的调用;
clean就是对于生成的文件进行清除;
1.4验证测试缓冲区的存在
我们的main.c文件里面,这个就是简单的打印一下这个hello world这句话,sleep是休眠两秒钟,这个sleep需要包含对应的头文件,就是上面写的这个unistd.h文件;
我们输入make就是运行这个processbar文件,就可以查看这个休眠的过程以及结果;
./processbar就是运行这个文件的指令,我们通过这个指令就可以查看这个休眠的过程;
下面我们把这个代码里面的\n去掉,观察这个效果:
发现是先去休眠两秒,再打印出来的结果,这个实际上就是可以证明缓冲区的存在的,因为这个程序的代码在执行的时候一定是先去执行hello world命令,再次休眠的,但是这个结果显示的却是先是休眠,这个就说明我们的hello world一定位于某一个地方,这个地方就是缓冲区;
这个缓冲区的存在也是可以验证的,使用fflush指令刷新这个标准输出流,这样的话当这个程序执行到这个步骤的时候,就会直接把这个在缓冲区里面的数据刷新到显示器上面去;
1.5倒计时的设置
这个时候我们还是在原来的基础上面对于我们的main.c文件进行修改哦,我们想要按照10 9 8 76 这样的方式进行这个时间的倒计时,\r是为了让下一个显示的数字覆盖掉上一个数字.%-2d表示这个数字的打印时候,是左对齐,而且这个数字的长度是2,每一次都要进行刷新;
这个实际上就是%d的话,会显示出来这个10 90 80 70 这个样子的,因为我们后面的那个0没有办法被覆盖掉,%2d就会让这个打印的数字长度为2,而且是靠右边显示,这个样子打印 的话这个结果看着不美观,我们加上-之后,这个结果就会靠左边显示,这个就是优化的过程;
1.6宏的定义与函数声明
这个里面为啥呢么要进行声明,因为这个是我们实现这个进度条的函数接口,为什么进行这个宏的定义,我们定义的这个宏是旋转符号和这个加载时候的这个符号显示进度,都是为了我们后续的这个函数的书写做铺垫的,其实这个是函数里面使用,我们才回去这个头文件里面进行定义,但是我的这个是博客,是按照理解顺序写的,这个就是相反的顺序,为后面做一下铺垫;
下面的这个就是头文件里面的函数的声明和宏的定义:
1.7炫酷的旋转符号
其实也不是很炫酷,只是为了凸显这个过程里面加载的这个过程:
下面的这个就是processbar.c文件里面的部分内容,我们的这个label数组里面的就是这个旋转过程里面涉及到的所有的动画,就是这几个符号之间的来回切换;
1.8进度条的实现
这个main.c函数里面只需要去实现这个生成进度条函数调用就可以了,这个进度条函数在processbar文件里面进行实现功能的;
processbar.c文件里面的函数功能的实现:
这个里面的呢内容很多哈,lable就是我们的那个动图的展示过程里面的所有的元素,这个加载过程也会涉及到这个休眠,但是使用sleep函数的话这个休眠时间就会太长,我们这个里面使用的就是usleep函数,单位是微秒,sleep是秒,相差1000000倍呢;
这个lable数组里面的元素要被不停的打印,这个时候五个元素的话就会越界,我们需要计算这个数组的长度把cnt模上len长度作为这个下标,规避越界的风险;
printf里面的第二个参数后面加上了两个%%,这个就是为了显示出来这个%的效果,否则这个加载进度上面先是的就是这个1 2 3 4………………,加上之后就是1% 2% 3% 4% ………………;
最后我们直接在这个main.c函数里面调用这个方法就可以了:
这个只是最基础的版本,我们可以有多个方法实现升级,感兴趣的小伙伴可以自行尝试,有问题也可以私信我欧~~