5---Linux小程序“进度条”及缓冲区的概念(逻辑梳理,轻松理解)

一、缓冲区的解析:

1.1论点的引入:

  • 在Linux中有一个接口sleep,可以使得C/C++程序休眠一段指定的时间。他需要依赖的头文件是<unistd.h>,注意这个接口为Linux私有。
  • usleep接口类似sleep接口,但是单位为微秒。
  • 下面两份代码,会在不同时间节点打印hello,但是两份代码的差别微乎其微,是什么原因印象的呢?

1.2原因解析:默认缓冲区:

  • 在C/C++中,会针对标准输出流,为我们提供默认的缓冲区,这个缓冲区通常通常只有几KB大小。
  • printf的输出是行缓冲,就意味着输出的内容会被缓存在内存中。这种行为可以确保当你使用printf连续输出多个字符串时,它们会被一次性输出而不是一个字符一个字符地输出,从而提高效率。
  • 因此,就会导致以上第二种情况。即程序先休眠2秒,然后才会打印hello字符串。
  • 如果想要先打印hello字符串再休眠,就需要"刷新行缓冲区"。
  • 正常情况下刷新行缓冲区的方法有三种:缓冲区已满、遇到换行符'\n'、程序正常结束。
  • 像以上第一种情况就是使用'\n'刷新缓冲区的。

1.3强制刷新行缓冲区:

  • 使用fflush接口,可以强制刷新行缓冲区。这样就可以实现,先打印hello再休眠2秒的操作。

1.4对回车换行的解析:

  • '\n'我们称为回车换行,回车换行=回车+换行,他会刷新缓冲区。
  • '\r'我们称为换行,不会刷新缓冲区。

二、字符设备------显示器和键盘:

  • 通常情况下,显示器显式一个整数,是真的显式一个整形数字吗?答案是:不是!!!
  • 显示器是字符设备,他会通过函数将整形数字切割成一个个数字,然后转换为字符数字,一个个显示到显示器上。
  • 键盘也是一样,将读取到的一个个字符数字转换为整形数字后,组合,存放到整形变量中。

三、进度条实现

  • 当前版本,只完成外在不完成内在,相当于徒有其形,目的是帮助理解逻辑。
  • 不会放视频,截两张图给大伙看看。
  • 进度条每涨1%,多打印一个#再[]中,另外使用百分比显示当前进度,最后一个方括号是一个动画演示,防止进度条卡住时,我们不知道是依旧在加载还是真的卡住了。
相关推荐
代码中介商5 分钟前
Linux 帮助手册与用户管理完全指南
linux·运维·服务器
cccccc语言我来了40 分钟前
C++轻量级消息队列服务器
java·服务器·c++
xiaoshuaishuai81 小时前
C# Codex 脚本编写
java·服务器·数据库·c#
Ai173163915792 小时前
GB200 NVL72超节点深度解析:架构、生态与产业格局
大数据·服务器·人工智能·神经网络·机器学习·计算机视觉·架构
思茂信息2 小时前
CST交叉cable的串扰(crosstalk)仿真
服务器·开发语言·人工智能·php·cst
weixin_449173652 小时前
Linux -- 项目中查找日志的常用Linux命令
linux·运维·服务器
琉璃榴3 小时前
Visual Studio Code连接远程服务器
服务器·vscode·github
深念Y3 小时前
赛米尼M02/海纳斯HiNAS系统-WiFi驱动安装教程
运维·服务器·网络·docker·nas·机顶盒·hinas
想唱rap3 小时前
C++智能指针
linux·jvm·数据结构·c++·mysql·ubuntu·bash
会飞的土拨鼠呀3 小时前
Ubuntu24.04安装open-vm-tools
运维·服务器