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

news/2024/12/23 4:52:25/

个人主页:兜里有颗棉花糖
欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 兜里有颗棉花糖 原创
收录于专栏【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.ppmy.cn/news/1120580.html

相关文章

深拷贝和浅拷贝的区别

本文内容 主要阐述下深拷贝和浅拷贝的区别 通俗理解 深拷贝和浅拷贝最根本的区别在于是否真正获取一个对象的复制实体&#xff0c;而不是引用。 假设B复制了A&#xff0c;修改A的时候&#xff0c;看B是否发生变化&#xff1a; 如果B跟着也变了&#xff0c;说明是浅拷贝&…

python-docx办公自动化批量生成离职证明

关注公众号&#xff1a;Python Lab 首先&#xff0c;在网络找到这样一份模板内容&#xff0c;可以根据这么模板进行排版 这是存放在Excel中的数据&#xff0c;根据数据遍历其中的内容&#xff0c;写入word当中 完整代码实现 from docx import Document import pandas as pd …

打造本地紧密链接的开源社区——KCC@长沙开源读书会openKylin爱好者沙龙圆满举办...

2023年9月9日&#xff0c;由开源社联合 openKylin 社区举办的 KCC长沙开源读书会&openKylin 爱好者沙龙&#xff0c;在长沙圆满举办。这是 KCC长沙首次正式进入公众视野&#xff0c;开展开源交流活动&#xff0c;也是 openKylin 社区长沙首场线下沙龙。长沙地区及其周边的众…

【计算机网络】 Nagle算法

文章目录 目的Nagle算法的规则关闭Nagle算法 目的 Nagle算法就是为了尽可能发送大块数据&#xff0c;避免网络中充斥着许多小数据块。&#xff08;因为在传输时不会因为数据包小而传输的快&#xff0c;是根据包的个数转发的&#xff09; Nagle算法的规则 如果包长度达到MSS&…

某手新版本sig3参数算法还原

Frida Native层主动调用 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81…

C语言-扫雷游戏的实现

&#x1f308;write in front&#x1f308; &#x1f9f8;大家好&#xff0c;我是Aileen&#x1f9f8;.希望你看完之后&#xff0c;能对你有所帮助&#xff0c;不足请指正&#xff01;共同学习交流. &#x1f194;本文由Aileen_0v0&#x1f9f8; 原创 CSDN首发&#x1f412; 如…

基于若依ruoyi-nbcio增加flowable流程待办消息的提醒,并提供右上角的红字数字提醒(三)

更多ruoyi-nbcio功能请看演示系统 gitee源代码地址 前后端代码&#xff1a; https://gitee.com/nbacheng/ruoyi-nbcio 演示地址&#xff1a;RuoYi-Nbcio后台管理系统 1、上一节说到RedisReceiver &#xff0c;这里有调用了NbcioRedisListener自定义业务监听&#xff0c;如下…

APP应用在Google Play上架/更新被拒的原因及解决方法汇总

Google Play商店作为全球发布Android应用的领先平台之一&#xff0c;吸引了数百万开发人员的关注。 然而&#xff0c;要在Google Play商店上架和更新应用并不容易。商店有严格的规定和审核政策&#xff0c;需要开发者遵守。 一、谷歌上架方式 1、NewUpdate 正式发布后最主流…