当前位置: 首页 > ds >正文

Linux(6)——第一个小程序(进度条)

目录

一、行缓冲区的概念

二、\r与\n

三、进度条代码书写与展示

1.如何表示进度条是在加载的

2.整体框架

3.书写

3.1makefile:

3.2process.h: 

3.3process.c:

3.4main.c:

3.5美化 


一、行缓冲区的概念

首先,我们来见一见行缓冲区,对比下面两个代码就可以理解了。

这个的结果毋庸置疑了就是:

那么如果我们修改一下这个代码呢,比如这样:

结果又如何呢,我们运行一下:

我们惊奇的发现,居然和原来完全不一样,这个代码显示的是先休眠3秒再打印出hello world。

这也就说明了有行缓冲区的存在。

显示器对应的是行刷新,即当缓冲区当中遇到\n'或是缓冲区被写满才会被打印出来,而在第二份带码当中并没有\n,所以字符串hello world先被写到缓冲区当中去了,然后休眠3秒后,直到程序运行结束时才将hello world打印到显示器当中。 

二、\r与\n

\r:回车,让光标回到行首(类似于之前的打字机)

\n:换行,让光标来到下一行

而我们电脑键盘上面的enter键就是\r+\n(老式键盘的enter键的形状也说明了这一点)

既然是是使光标回到本行行首,那么如果我们向显示器上写了一个数之后再让光标回到本行行首,然后再写一个数,不就相当于将前面一个数字覆盖了吗?
但这里有一个问题:不使用"\n’进行换行怎么将缓冲区当中数据打印出来?
这里我们可以使用fflush函数,该函数可以刷新缓冲区,即将缓冲区当中的数据刷新当显示器当中。基于这个特性我们可以编写一个倒计时的程序。 

光标回到行首再打印就实现了倒计时的效果:

三、进度条代码书写与展示

根据上面的基本知识,我们就可以写一个进度条的代码了。

1.如何表示进度条是在加载的

有的时候们在下载东西的时候,进度条可能会卡着不动,但是确实是在运行,我们该怎么表示呢?

这里我梦可以设置一个标记在随机改变形状,就可以知道是不是在运行了。

例如:

const char *lable="|/-\\"; 

在这几个符号之间切换。

2.整体框架

我们为了实现下载功能,我们可以模拟实现一个下载的场景,设置总的下载数据的值,然后设置speed值,用休眠时间模拟下载的速度。for()循环模拟正在下载数据。

3.书写

3.1makefile:

实现多文件编译

3.2process.h: 

3.3process.c:

3.4main.c:

效果展示:

3.5美化 

如果你觉得这样有点单调,你也可以加上颜色,关于ANSI颜色转义序列可以到网上找到。

改进后:

效果展示:

http://www.xdnf.cn/news/8730.html

相关文章:

  • LeetCode 2942.查找包含给定字符的单词:使用库函数完成
  • 台式机安装新的固态硬盘后无显示
  • 【C语言练习】060. 使用指针操作字符串
  • Kotlin全栈工程师转型路径
  • Vue-创建应用/挂载应用/根组件模版-.vue单文件/应用配置
  • Cesium中根据不同条件设置3D Tiles样式
  • 【VBA 中GetOpenFilename】常用友好的人机交互文件全路径选择模式
  • 计算机视觉与深度学习 | 基于 YOLOv8 + BeautyGAN + CodeFormer + Face Parsing 实现简单的人脸美颜
  • 【来自纳米AI-大模型】ubuntu 24.04 登陆界面分辨率太高,内容显示得特别小 问题解决方案(亲测有效)
  • lua脚本学习笔记1:Vscode添加lua环境_lua基本语法
  • HarmonyOS赋能套件介绍
  • 开篇:MCP理论理解和学习
  • 元组可以比较大小吗?一次返回多个值?编程语言的元组?声明变量一定需要指定类型吗?
  • Ubuntu20.04 gr-gsm完整安装教程
  • Kanass V1.1.1版本发布,支持查看项目/迭代/事项进度
  • 剖析 Spring 中 @ResponseBody 原理与 Tomcat NIO 写事件(SelectionKey.OP_WRITE)的协作机制
  • MySQL分库分表
  • vue3中使用computed
  • Spark集群架构解析:核心组件与Standalone、YARN模式深度对比(AM,Container,Driver,Executor)
  • kafka之操作示例
  • 大文件上传,对接阿里oss采用前端分片技术。完成对应需求!
  • 【MySQL】第7节|Mysql锁机制与优化实践以及MVCC底层原理剖析
  • ubuntu 安装latex
  • 清除 Ubuntu 磁盘空间
  • 安卓开发用到的设计模式(2)结构型模式
  • 开发者工具箱-鸿蒙金额转换开发笔记
  • R语言学习--Day08--bootstrap原理及误区
  • Ollama01-安装教程
  • 【MySQL】07.表内容的操作
  • Android 16系统源码_自由窗口(一)触发自由窗口模式