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.pswp.cn/news/906857.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

51页 @《人工智能生命体 新启点》中國龍 原创连载

《 人工智能生命体 新启点 》一书,以建立意识来建立起生命体,让其成为独立、自主的活动个体;也就可以理解为建立生命体的思想指导。 让我们能够赋予他灵魂!

微软全新开源命令行文本编辑器:Edit — 致敬经典,拥抱现代

名人说:博观而约取,厚积而薄发。——苏轼《稼说送张琥》 创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 目录 一、引言:命令行的新利器二、Edit:致敬经典,拥抱现代1. 命令行的“新升级”2. 为什么要有 Edit?三、核心功能与特性一览1. 完全开源、MIT 许可证…

使用MybatisPlus实现sql日志打印优化

背景: 在排查无忧行后台服务日志时,一个请求可能会包含多个执行的sql,经常会遇到SQL语句与对应参数不连续显示,或者参数较多需要逐个匹配的情况。这种情况下,如果需要还原完整SQL语句就会比较耗时。因此,我…

go多线程压测监控

实现了 go多协程压力测试实现了Monitor,异步统计qps、时延、cpu(client端)等指标,周期printStat。只需要把单条执行func传给Monitor即可命令行传参ctrlc之后正常退出(mock cpu 占用) 代码见 https://gitee.com/bbjg001/golearning/tree/master/others/…

安卓无障碍脚本开发全教程

文章目录 第一部分:无障碍服务基础1.1 无障碍服务概述核心功能: 1.2 基本原理与架构1.3 开发环境配置所需工具:关键依赖: 第二部分:创建基础无障碍服务2.1 服务声明配置2.2 服务配置文件关键属性说明: 2.3 …

闲时处理技术---CAD C#二次开发

在CAD C#二次开发中,使用闲时处理技术可以提高程序的响应性能和资源利用率。以下是一般的实现步骤: 1. 了解CAD的事件机制 CAD提供了一些事件,如 Idle 事件,当CAD应用程序处于空闲状态时会触发该事件。你可以订阅这个事件来执行闲…

Git研究

以下命令在CentOS系统下执行 创建Git仓库 git init git-example 监控.git目录的变化情况: watch -n .5 tree .git 写入文件内容,并把文件添加到Stage暂存区 echo 1 > t.txtgit add 1.txt 观察结果如下:objects下多出了一个d00491fd…

野火鲁班猫(arrch64架构debian)从零实现用MobileFaceNet算法进行实时人脸识别(四)安装RKNN Toolkit Lite2

RKNN Toolkit Lite2 是瑞芯微专为RK系列芯片开发的NPU加速推理API。若不使用该工具,计算任务将仅依赖CPU处理,无法充分发挥芯片高达6TOPS的NPU算力优势。 按照官方文档先拉一下官方代码库,然后通过whl文件安装,因为我是python3.1…

Vue3集成Element Plus完整指南:从安装到主题定制下-实现后台管理系统框架搭建

本文将详细介绍如何使用 Vue 3 构建一个综合管理系统,包括路由配置、页面布局以及常用组件集成。 一、路由配置 首先,我们来看系统的路由配置,这是整个应用的基础架构: import {createRouter, createWebHistory} from vue-rout…

【Oracle】创建公共数据连接

需求描述 两个oracle数据库,想从B数据库创建视图脚本访问A数据库相关表的数据,该怎么访问呢? 解决方法 在Oracle数据库中,创建公共数据库链接(Public Database Link)可以允许数据库中的任何用户访问远程…

时序数据库IoTDB的分片与负载均衡策略深入解析

一、引言 随着数据库服务的业务负载增加,扩展服务资源成为必然需求。扩展方式主要分为纵向扩展和横向扩展。纵向扩展通过增加单台机器的能力(如内存、硬盘、处理器)来实现,但受限于单台机器的硬件能力。而横向扩展则通过增加更多…

计算机网络期末复习资料

我用夸克网盘分享了「计算机网络」, 链接:https://pan.quark.cn/s/8aac2f0b840e 计算机网络试题库 1单项选择题 1.1以下属于物理层的设备是 ( A) A. 中继器 B.以太网交换机 C. 桥 D. 网关 1.2在以太网中,是根据 (B) 地址来区分…

【IEEE 2025】低光增强KANT(使用KAN代替MLP)----论文详解与代码解析

【IEEE 2025】本文参考论文Enhancing Low-Light Images with Kolmogorov–Arnold Networks in Transformer Attention 虽然不是顶刊,但是有值得学习的地方 论文地址:arxiv 源码地址:github 文章目录 Part1 --- 论文精读Part2 --- 代码详解形状…

naivechain:简易区块链实现

naivechain:简易区块链实现 naivechain A naive and simple implementation of blockchains. 项目地址: https://gitcode.com/gh_mirrors/nai/naivechain 项目介绍 naivechain 是一个简单且易于理解的区块链实现项目。它使用 Go 语言编写,以极简…

Zabbix开源监控的全面详解!

一、zabbix的基本概述 zabbix,这款企业级监控软件,能全方位监控各类网络参数,确保企业服务架构的安全稳定运行。它提供了灵活多样的告警机制,帮助运维人员迅速发现并解决问题。此外,zabbix还具备分布式监控功能&#…

软考软件评测师——软件工程之开发模型与方法

目录 一、核心概念 二、主流模型详解 (一)经典瀑布模型 (二)螺旋演进模型 (三)增量交付模型 (四)原型验证模型 (五)敏捷开发实践 三、模型选择指南 四…

50天50个小项目 (Vue3 + Tailwindcss V4) ✨ | Blurry Loading (毛玻璃加载)

📅 我们继续 50 个小项目挑战!—— Blurry Loading 组件 仓库地址:https://github.com/SunACong/50-vue-projects 项目预览地址:https://50-vue-projects.vercel.app/ ✨ 组件目标 实现一个加载进度条,随着加载进度的…

WPF性能优化之延迟加载(解决页面卡顿问题)

文章目录 前言一. 基础知识回顾二. 问题分析三. 解决方案1. 新建一个名为DeferredContentHost的控件。2. 在DeferredContentHost控件中定义一个名为Content的object类型的依赖属性,用于承载要加载的子控件。3. 在DeferredContentHost控件中定义一个名为Skeleton的ob…

VLM-MPC:自动驾驶中模型预测控制器增强视觉-语言模型

《VLM-MPC: Model Predictive Controller Augmented Vision Language Model for Autonomous Driving》2024年8月发表,来自威斯康星大学的论文。 受视觉语言模型(VLM)的紧急推理能力及其提高自动驾驶系统可理解性的潜力的启发,本文…

推荐系统里真的存在“反馈循环”吗?

推荐系统里真的存在“反馈循环”吗? 许多人说,推荐算法不过是把用户早已存在的兴趣挖掘出来,你本来就爱听流行歌、买潮牌玩具,系统只是在合适的时间把它们端到你面前,再怎么迭代,算法也改变不了人的天性&a…