💭 前言
本章我们先对缓冲区的概念进行一个详细的探究,之后会带着大家一步步去编写一个简陋的 "进度条" 小程序。最后我们来介绍一下 Git,着重讲解一下 Git 三板斧,一般只要掌握三板斧就基本够用了。
缓冲区(Buffer)
先说一下 unistd.h 库中的 sleep 函数,它可以按照秒去休眠
我们先创建一个文件,并写一些代码:
#include <stdio.h>
#include <unistd.h>
int main(void) {
printf("Helo,World!\n");
sleep(2);
return 0;
}
??这里是先运行printf还是sleep???
这还用思考?肯定打出 Helo, World,先运行 处代码,然后运行 B 处代码休眠
:
如果说:我们把\n给删了呢?
这里是休眠了2s后,才出现的hello world。怎么说???
看样子是先执行 B 再执行 了,but……
然而实际上,无论你加不加 \n,代码都是从上往下先运行的,即先执行 printf 再执行 sleep!
代码没有任何的循环判断跳转什么的操作,那一定是 从上到下按顺序执行的,要坚信自己!
这就是所谓的 "顺序结构",也是我们的默认结构。
既然是从上到下按顺序执行,可是我们运行代码观察到的现象就是 sleep 先休眠 然后打印啊。
真像:实际上,printf 已经先执行了,只是这个 "Helo,World" 没有立马被显示出来罢了!
当我们 sleep 时也没有显示,当我们 sleep 完甚至到程序退出后,这个 "Helo,World" 才显示出来。
这个时候如果打印的消息如果没有立即被显示出来,
在 sleep 执行期间它最后显示出来证明了它的存在,
但是 sleep 2s 内它并没有显示出来,那么问题来了 —— 这个 "Helo,World" 在哪?
没错,这就是就是 " 缓冲区 " !
对缓冲区的理解
什么是缓冲区?这个缓冲区在哪里?缓冲区其实说白了,就是一段内存空间。
既然是内存空间,那我们就能理解刚才举的例子里的 "Helo,World" 数据是放在了内存空间里。
只要在内存里就没有打印出来,所以我们 sleep 2s 时它一直在内存里 "躺平" 呢。
最后 return 退出的时候,这个数据才