【探索Linux世界|中秋特辑】--- 倒计时和进度条的实现与演示

个人主页:兜里有颗棉花糖
欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 兜里有颗棉花糖 原创
收录于专栏【Linux专栏】🎈
本专栏旨在分享学习Linux的一点学习心得,欢迎大家在评论区讨论💌
演示环境:centos7
在这里插入图片描述

目录

  • 一、Linux缓冲区的知识铺垫
    • 缓冲区解释
    • 证明缓冲区的存在
  • 二、倒计时的实现
  • 三、进度条的实现

一、Linux缓冲区的知识铺垫

在编写进度条之前我们需要先了解Linux缓冲区的知识。

下图是main.c中的内容(main.c修改前),请看:
在这里插入图片描述
请看视频演示:

QQ录屏20230918112820


视频链接: https://live.csdn.net/v/329120

我们通过视频可以看到,先把Hello,Linux!打印完成之后,休眠了2秒钟之后程序结束。

现在如果我们对main.c中的内容进行修改,即仅仅把\n去掉再来看看程序执行情况:
在这里插入图片描述

请看视频演示(视频链接:https://live.csdn.net/v/329165):

缓冲区演示2

通过视频可以看到程序先休眠了2秒后才执行打印Hello,Linux!,并且没有换行。但是这里就会给我们带来了一些困惑,由于程序是从上往下开始执行的,所以程序应该是先打印Hello,Linux!不换行,然后再休眠2秒的。那为什么我们看到的程序执行过程并非和我们想象的一样的。

这一切都是缓冲区在作祟。

缓冲区解释

现在来解决上述的问题,在程序休眠2秒(是最后执行的)之前Hello,Linux!一定已经被执行完成了,那么在执行sleep(2);即程序休眠2秒期间,Hello,Linux!是在缓冲区进行存放的。这里的缓冲区是由C语言维护的一段内存。

在sleep(2)期间Hello,Linux!在缓冲区进行存放,所以这里默认行为就是在程序退出时缓冲区里的数据从缓存区内释放出来显示在我们的屏幕上。

证明缓冲区的存在

我们如果想把数据强制的刷新到显示器上的话,我们需要用到C语言中的fflush函数(强制将缓冲区中的数据写入文件(或者从文件读取数据))。
同时在Linux中,一切皆文件,所以我们的显示器起始也是文件。

请看变化后的main.c程序(使用fflush函数进行刷新):
在这里插入图片描述

现在再来看程序运行结果,请看:

可以看在现在代码执行的效果和我们想象的是一样的:先打印Hello,Linux!,然后再执行程序休眠两秒(因为我们使用了fflush()函数强制将缓冲区的数据写入到显示器stdout中,不要忘记了再Linux中一切皆文件)。

有了缓冲区的知识作为铺垫,现在开始进入正题:倒计时和进度条的设计和实现。

二、倒计时的实现

下图是倒计时的实现。
在这里插入图片描述
请看下面的演示视频(视频链接:https://live.csdn.net/v/329187):

Linux倒计时的实现。

三、进度条的实现

关于进度条的实现,代码如下:

void processbar()
{// printf("Hello,processBar!\n");char bar[NUM];memset(bar,'\0',sizeof(bar));int len = strlen(lable);int cnt = 0;while(cnt<=100){printf("[%-100s][%d%][%c]\r",bar,cnt,lable[cnt%len]);                                                                                                                            fflush(stdout);bar[cnt++] = STYLE;usleep(100000);if(cnt < 100) bar[cnt] = '>';}printf("\n");
}

演示结果如下,请看视频演示(视频链接:https://live.csdn.net/v/330175):

进度条

在这里插入图片描述

好了,以上就是本文的全部内容了。
就到这里吧,再见啦友友们!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/139163.html

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

相关文章

栈的详细实现

一 定义 概念 栈是一种特殊的线性表&#xff0c;只允许在固定的一端进行操作。该端叫做栈顶&#xff0c;相对的另一端叫做栈底。 符合LIFO&#xff08;后进先出&#xff09;的规则 关于栈顶的两个操作&#xff1a; 压栈/入栈/进栈&#xff1a;在栈顶部插入数据 出栈:栈顶删…

2023华为杯研究生数学建模C题分析

完整的分析查看文末名片获取&#xff01; 问题一 在每个评审阶段&#xff0c;作品通常都是随机分发的&#xff0c;每份作品需要多位评委独立评审。为了增加不同评审专家所给成绩之间的可比性&#xff0c;不同专家评审的作品集合之间应有一些交集。但有的交集大了&#xff0c;则…

软件测试缺陷报告详解

【软件测试行业现状】2023年了你还敢学软件测试&#xff1f;未来已寄..测试人该何去何从&#xff1f;【自动化测试、测试开发、性能测试】 缺陷报告是描述软件缺陷现象和重现步骤地集合。软件缺陷报告Software Bug Report&#xff08;SBR&#xff09;或软件问题报告Software Pr…

《动手学深度学习 Pytorch版》 7.5 批量规范化

7.5.1 训练深层网络 训练神经网络的实际问题&#xff1a; 数据预处理的方式会对最终结果产生巨大影响。 训练时&#xff0c;多层感知机的中间层变量可能具有更广的变化范围。 更深层的网络很复杂容易过拟合。 批量规范化对小批量的大小有要求&#xff0c;只有批量大小足够…

智能合约漏洞案例,NeverFall 漏洞复现

智能合约漏洞案例&#xff0c;NeverFall 漏洞复现 1. 漏洞简介 https://twitter.com/BeosinAlert/status/1653619782317662211 2. 相关地址或交易 https://explorer.phalcon.xyz/tx/bsc/0xccf513fa8a8ed762487a0dcfa54aa65c74285de1bc517bd68dbafa2813e4b7cb 攻击交易 攻击…

Python绘制X-bar图和R图 | 统计过程控制SPC

X-bar图和R图是用于统计过程控制&#xff08;SPC&#xff09;的两种常用工具&#xff0c;用于监测过程的平均值和范围&#xff08;变异性&#xff09;。这些图有助于识别过程中的变化和异常&#xff0c;以便及时采取纠正措施。 **X-bar图&#xff08;平均值控制图&#xff09;…

pcl--第十二节 2D和3D融合和手眼标定

2D&3D融合 概述 截止目前为止&#xff0c;我们学习了机器人学&#xff0c;学习了2D和3D视觉算法。我们也学习了2D相机(图像数据的来源)和3D相机(点云数据的来源)工作原理。 实际上&#xff0c;我们最终要做的&#xff0c;是一个手眼机器人系统。在这个系统里&#xff0c…

zookeeper + kafka

Zookeeper 概述 Zookeeper是一个开源的分布式服务管理框架。存储业务服务节点元数据及状态信息&#xff0c;并负责通知再 ZooKeeper 上注册的服务几点状态给客户端 Zookeeper 工作机制 Zookeeper从设计模式角度来理解: 是一个基于观察者模式设计的分布式服务管理框架&…

微信小程序底部安全区域高度获取

CSS 属性 safe-area-inset-bottom safe-area-inset-bottom 就是安全区的高度 padding-bottom:env(safe-area-inset-bottom); wx.getSystemInfoSync() wx.getSystemInfoSync()可以获取系统信息 let system wx.getSystemInfoSync() let bottomSafe system.screenHeight -…

yolov5使用最新MPDIOU损失函数,有效和准确的边界盒回归的损失,优于GIoU/EIoU/CIoU/EIoU(附代码可用)

文章目录 1. 论文1.1. 主要目的1.2. 设计思路2 代码3.总结1. 论文 MPDIoU: A Loss for Efficient and Accurate Bounding Box Regression (一个有效和准确的边界框损失回归函数) 论文地址 1.1. 主要目的 当预测框与边界框具有相同的纵横比,但宽度和高度值完全不同时,大多数…

【湖科大教书匠】计算机网络随堂笔记第1章(计算机网络概述)

目录 1.1、计算机网络在信息时代的作用 我国互联网发展状况 1.2、因特网概述 1、网络、互连网&#xff08;互联网&#xff09;和因特网 2、因特网发展的三个阶段 因特网服务提供者ISP(Internet Service Provider) 基于ISP的三层结构的因特网 3、因特网的标准化工作 4、因特网的…

2023华为杯数学建模D题——碳排放路径优化基于指数分解法的LMDI 模型

LMDI 模型是基于指数分解法&#xff08;IDA&#xff09; 发展而成的一种因素分解法。LMDI模型在 Kaya 拓展式的基础上&#xff0c; 利用对数平均法对影响因素进行分析。 综合比较其他的指数分解方法&#xff0c; LMDI 分解法有着可完全分解因子、 无残差项等优势。根据对 Kaya …

Xamarin.Android实现App内版本更新

目录 1、具体的效果2、代码实现2.1 基本原理2.2 开发环境2.3 具体代码2.3.1 基本设置2.3.2 系统的权限授予2.3.3 进度条的layout文件2.3.4 核心的升级文件 3、代码下载4、知识点5、参考文献 1、具体的效果 有事需要在程序内集成自动更新的功能&#xff0c;网上找了下&#xff…

企业级数据仓库-理论知识

D3 AM 大数据中间件 Hive&#xff1a;将SQL转化成分布式Map/Reduce进行运算&#xff0c;也支持转换成Spark,需要单独安装Hive集群才能访问Spark,支持60%的SQL&#xff0c;延迟比较大。SparkSQL:属于Spark生态圈&#xff0c;Hive on Sqark。HBase: NoSQL,高并发读&#xff0c;适…

thinkphp8路由

thinkphp8已出来有好一段时间了。这些天闲来无事&#xff0c;研究了下tp8的路由。默认情况下&#xff0c;tp8的路由是在route\app.php的文件里。但在实际工作中&#xff0c;我们并不会这样子去写路由。因为这样不好管理。更多的&#xff0c;是通过应用级别去管理路由。假如项目…

设计模式之解释器模式

一、定义 1、定义 Given a language,define a representation for its grammar along with an interpreter that uses the representation to interpret sentences in the language.&#xff08;给定一门语言&#xff0c;定义它的语法的一种表示&#xff0c;并定义一个解释器&…

Winform直接与Wpf交互

Winform项目中&#xff0c;可以直接使用wpf中的自定义控件和窗体 测试环境&#xff1a; vistual studio 2017 window 10 一 winform直接使用wpf的自定义控件 步骤如下&#xff1a; 1 新建winfrom项目&#xff0c;名为WinFormDemo&#xff0c;默认有一个名为Form1的窗体…

【GAMES103】基于物理的计算机动画入门(1)前置的基础数学知识

GAMES103: 基于物理的计算机动画入门 链接&#xff1a;GAMES103 1. 坐标系的划分 在游戏引擎中分为右手和左手坐标系&#xff0c;区分的依据是什么&#xff1f; 上图可以看到如果是左手坐标系&#xff0c;那么所有的物体都在屏幕后面&#xff0c;意味着x&#xff0c;y&#x…

物联网的未来:连接的智能世界

物联网&#xff08;IoT&#xff09;是引领我们走向未来的一项关键技术。它让物品通过互联网进行连接&#xff0c;交流&#xff0c;开创了智能生活新时代。预计到2025年&#xff0c;全球将拥有超过410亿的IoT设备。在对人类生活的每个方面产生影响的同时&#xff0c;物联网也正在…

2023华为杯研究生数学建模竞赛CDEF题思路+模型代码

全程更新华为杯研赛CDEF题思路模型及代码&#xff0c;大家查看文末名片获取 华为杯C题思路分析 问题一 在每个评审阶段&#xff0c;作品通常都是随机分发的&#xff0c;每份作品需要多位评委独立评审。为了增加不同评审专家所给成绩之间的可比性&#xff0c;不同专家评审的作…