Linux 小程序————进度条

目录

引子

缓冲区

回车换行

进度条小程序


引子

前期我已经和大家聊过Linux一些常用指令、权限、gcc翻译过程、make/makefile 等相关知识,今天结合这些基础知识来写一个Linux下的小程序。

缓冲区

在Linux目录下创建两个文件:makefile 和 project.c ,在project.c中写一个简单的打印hello world,并让其休眠2秒后打印。

Linux 小程序————进度条_第1张图片Linux 小程序————进度条_第2张图片

 仔细看,左边helloworld后跟了 ' \n ' ,此时出去执行make,语句被直接打印出来;

右边hello world后没跟 ' \n ',此时出去执行make,语句过了两秒才被打印出来。

说明:

1、程序执行默认是按顺序结构执行(没有判断、循环情况下),所以一定是printf 先于sleep执行,但是先执行 != 数据先显示,printf的确执行了但是没有显示出来而执行了sleep休眠。当sleep结束时才刷新的数据。

2、sleep期间printf 一定执行完打印了,那数据在哪里呢?——在缓冲区。当sleep执行完,缓冲区的数据才打印到终端上。

3、那为什么' \n '直接打印了?—— ' \n '是行缓冲,只要有,这一行包括前面的内容就打印到终端

4、有什么办法可以在没有 ' \n '的情况下直接打印————fflush(stdout) 刷新标准输出流。

回车换行

1、回车:\r ,这里的回车不是我们口头上说的回车,口头上的回车其实是回车+换行。

这里回车是让光标回到一行的开始(覆盖)

2、换行:\n,换行是换到下一行的该位置。

3、回车换行:\r + \n,即口头上的回车,跳到下一行的开头。

Linux 小程序————进度条_第3张图片  老式键盘上的回车键意思就是回车+换行。

 根据这个结合上面的缓冲区,可以写一个倒计时小程序

Linux 小程序————进度条_第4张图片

 注意:1、%2d \r,不用\n,因为倒计时需要在一行内执行,所以不需要换行,\r 让光标回退到一行开始处,会覆盖之前的内容。

           2、%2d,格式控制为2个字符位,否则修改的只是第一个字符位的内容。cnt = 10,%d倒计时就是10,90,80...   

           3、fflush(stdout)刷新标准输出流,否则将没有打印显示(因为缓冲区问题)

进度条小程序

 接下来我们写一个进度条小程序,也是运用上面的知识。

Linux 小程序————进度条_第5张图片

 prograss.c:

Linux 小程序————进度条_第6张图片

你可能感兴趣的:(linux,运维,服务器)