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%,多打印一个#再[]中,另外使用百分比显示当前进度,最后一个方括号是一个动画演示,防止进度条卡住时,我们不知道是依旧在加载还是真的卡住了。
相关推荐
百锦再13 分钟前
在 CentOS 系统上实现定时执行 Python 邮件发送任务
java·linux·开发语言·人工智能·python·centos·pygame
zhao3266857511 小时前
海外代理IP平台Top3评测:LoongProxy、神龙动态IP、IPIPGO哪家更适合你?
服务器·网络·tcp/ip
最小的帆也能远航1 小时前
2018年下半年 系统架构设计师 综合知识
linux·运维·服务器
云边云科技1 小时前
企业跨区域组网新解:SD-WAN技术打造安全稳定网络体系
运维·网络·人工智能·安全·边缘计算
疯子@1231 小时前
nacos1.3.2 ARM 版容器镜像制作
java·linux·docker·容器
会飞的鱼_1231 小时前
Nginx性能优化与防盗链实战指南
运维·nginx·性能优化
Pretend° Ω2 小时前
LRU缓存详解:用C语言实现高效数据管理
运维·c语言·spring·缓存·lru·双向链表
Empty_7772 小时前
Linux防火墙-Iptables
linux·运维·服务器
十年编程老舅2 小时前
‌C++左值与右值:从基础概念到核心应用‌
linux·c++·右值引用·c++17·c++左值·c++右值·左值引用
飘忽不定的bug2 小时前
Ascend310B重构驱动run包
linux·ascend310