Linux(6)——第一个小程序(进度条)
目录
一、行缓冲区的概念
二、\r与\n
三、进度条代码书写与展示
1.如何表示进度条是在加载的
2.整体框架
3.书写
3.1makefile:
3.2process.h:
3.3process.c:
3.4main.c:
3.5美化
一、行缓冲区的概念
首先,我们来见一见行缓冲区,对比下面两个代码就可以理解了。
这个的结果毋庸置疑了就是:
那么如果我们修改一下这个代码呢,比如这样:
结果又如何呢,我们运行一下:
我们惊奇的发现,居然和原来完全不一样,这个代码显示的是先休眠3秒再打印出hello world。
这也就说明了有行缓冲区的存在。
显示器对应的是行刷新,即当缓冲区当中遇到\n'或是缓冲区被写满才会被打印出来,而在第二份带码当中并没有\n,所以字符串hello world先被写到缓冲区当中去了,然后休眠3秒后,直到程序运行结束时才将hello world打印到显示器当中。
二、\r与\n
\r:回车,让光标回到行首(类似于之前的打字机)
\n:换行,让光标来到下一行
而我们电脑键盘上面的enter键就是\r+\n(老式键盘的enter键的形状也说明了这一点)
既然是是使光标回到本行行首,那么如果我们向显示器上写了一个数之后再让光标回到本行行首,然后再写一个数,不就相当于将前面一个数字覆盖了吗?
但这里有一个问题:不使用"\n’进行换行怎么将缓冲区当中数据打印出来?
这里我们可以使用fflush函数,该函数可以刷新缓冲区,即将缓冲区当中的数据刷新当显示器当中。基于这个特性我们可以编写一个倒计时的程序。
光标回到行首再打印就实现了倒计时的效果:
三、进度条代码书写与展示
根据上面的基本知识,我们就可以写一个进度条的代码了。
1.如何表示进度条是在加载的
有的时候们在下载东西的时候,进度条可能会卡着不动,但是确实是在运行,我们该怎么表示呢?
这里我梦可以设置一个标记在随机改变形状,就可以知道是不是在运行了。
例如:
const char *lable="|/-\\";
在这几个符号之间切换。
2.整体框架
我们为了实现下载功能,我们可以模拟实现一个下载的场景,设置总的下载数据的值,然后设置speed值,用休眠时间模拟下载的速度。for()循环模拟正在下载数据。
3.书写
3.1makefile:
实现多文件编译
3.2process.h:
3.3process.c:
3.4main.c:
效果展示:
3.5美化
如果你觉得这样有点单调,你也可以加上颜色,关于ANSI颜色转义序列可以到网上找到。
改进后:
效果展示: