Linux中第一个小程序(希望大家能多多支持)

Linux中的第一个小程序- - -进度条

write in front

作者:@ 不进大厂不改名
专栏:@ Linux
作者简介:大一学生 希望能向其他大佬和同学学习!
本篇博客简介:Linux中的第一个小程序,顺便了解一下行缓冲区的概念。

本章目标:

1.行缓冲区的理解
2.进度条程序详解

1.行缓冲区的概念和理解(fflush函数)

当在输入和输出中遇到换行符时,执行真正的I/O操作。这时,我们输入的字符先存放在缓冲区,等按下回车键换行时才进行实际的I/O操作。典型代表是标准输入(stdin)和标准输出(stdout)。

看了上面的的概念是不是一脸蒙蔽,没有关系我们下面看一个程序来简单理解一下。
在这里插入图片描述

我们来分析一下这个程序,先打印“Hellow Linux!”,然后换行再睡眠3秒然后结束程序。

结果确实是这样的(打印了“Hellow Linux!”后停了三秒才结束)
在这里插入图片描述

如果改为这样呢?(去掉\n)

在这里插入图片描述

我们还是先分析一下:那这样会变成打印“Hellow Linux!”后不换行然后休眠三秒结束程序。
我们可以运行一下试试!

在这里插入图片描述

这里不符合我们的预期,程序是先进行3秒的休眠再打印“Hellow Linux!”
这是为什么呢?

按道理来说应该是顺序执行:执行打印“Hellow Linux!”后不换行然后休眠三秒结束程序。

答:这里是因为有行缓冲区的存在。
我们的显示器对应的是行刷新(换行可以进行刷新),即当行被写满的时候才会被打印出来.
而Hellow Linux!即没有写满行,也没有刷新缓冲区,所以并不会被打印到显示器上来。

\r和\n

\n:换行(让光标下移一格)
\r:回车(让光标回到这一行的行首)
当我们敲出enter时实际上就等于"\n+\r"

那么同学们可能会想到既然"\r"是立马回到这一行的行首,那么如果我们打印一个数使用\r回到行首继续写一个数,那么之前写的数会不会被覆盖了呢?

其实上这个问题的实质就是/r会不会刷新行缓冲区,如果它不会刷新行缓冲区,那么后面写的数就会被前面写的数覆盖,我们用下面的程序进行验证一下:

在这里插入图片描述
运行结果:
在这里插入图片描述
最后发现什么都没有打印,因此可以判定\r并不会刷新行缓冲区,如果想要将每个数字打印出来我们就需要一个缓冲区刷新函数。
这里刚好就有一个就是fflush(stdout)
加上这个函数我们再试试看:

在这里插入图片描述

我们发现它变成一个倒计时了(下面是两个时刻的倒计时)
在这里插入图片描述在这里插入图片描述

2.进度条的详细介绍

这里先说一下进度条代码的思路:
1.我们要设计一个进度条程序至少要有100个空间吧
2.我们的每个“#”对应者一个空间,有多少个“#”就代表到了百分之几
3.其中先介绍一下下面用到单位的意义和换算关系
usleep的单位是纳秒,1毫秒=1000纳秒
所以50000纳秒=50毫秒
走100次也就是5000毫秒,也就是程序会在5秒内运行完。
我们先写出这个基础程序

在这里插入图片描述

结果可以看见进度条初步实现了

在这里插入图片描述

但是我们觉得还是缺点什么,所以我们加上了框框可显示进度条的具体数字。程序如下:

在这里插入图片描述
最后的结果大家可以试试!在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值