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%,多打印一个#再[]中,另外使用百分比显示当前进度,最后一个方括号是一个动画演示,防止进度条卡住时,我们不知道是依旧在加载还是真的卡住了。
相关推荐
驰羽3 小时前
NAT模式下VMware的虚拟机DNS解析失败的问题解决
linux·网络·dns
菜鸡00014 小时前
安装G2O
linux
iru4 小时前
nginx被报CVE-2025-1695漏洞,检查后反馈是误报
运维·nginx
誰能久伴不乏4 小时前
epoll 学习踩坑:`fcntl` 设置非阻塞到底用 `F_SETFL` 还是 `F_SETFD`?
linux·服务器·网络·c++·tcp/ip
阿巴~阿巴~5 小时前
告别命令行:Navicat可视化操作数据库(附安装使用教程)
服务器·数据库·mysql·navicat·可视化操作数据库
TG:@yunlaoda360 云老大5 小时前
华为云国际站代理商跨境容灾是如何实现的?
服务器·数据库·华为云
来鸟 鸣间5 小时前
MIPI D-PHY 理解
linux·音视频·sensor·mipi
么么...6 小时前
在 Ubuntu 上安装 Docker 并部署 MySQL 容器
linux·运维·经验分享·笔记·mysql·ubuntu·docker
云川之下6 小时前
【网络】华为交换机S3700与S5700详解
服务器·网络·华为
翼龙云_cloud6 小时前
亚马逊云渠道商:Lightsail 如何制定备份与快照策略以平衡安全及成本?
运维·安全·云计算·aws