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

个人主页:兜里有颗棉花糖

欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 兜里有颗棉花糖 原创

收录于专栏【Linux专栏】🎈

本专栏旨在分享学习Linux的一点学习心得,欢迎大家在评论区讨论💌

演示环境:centos7

目录

一、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倒计时的实现。

三、进度条的实现

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

cpp 复制代码
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):

进度条

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

相关推荐
maosheng11462 小时前
RHCSA的第一次作业
linux·运维·服务器
wifi chicken3 小时前
Linux 端口扫描及拓展
linux·端口扫描·网络攻击
旺仔.2913 小时前
Linux 信号详解
linux·运维·网络
放飞梦想C3 小时前
CPU Cache
linux·cache
Hoshino.414 小时前
基于Linux中的数据库操作——下载与安装(1)
linux·运维·数据库
恒创科技HK5 小时前
通用型云服务器与计算型云服务器:您真正需要哪些配置?
运维·服务器
吴佳浩 Alben5 小时前
GPU 生产环境实践:硬件拓扑、显存管理与完整运维体系
运维·人工智能·pytorch·语言模型·transformer·vllm
播播资源6 小时前
CentOS系统 + 宝塔面板 部署 OpenClaw源码开发版完整教程
linux·运维·centos
源远流长jerry6 小时前
在 Ubuntu 22.04 上配置 Soft-RoCE 并运行 RDMA 测试程序
linux·服务器·网络·tcp/ip·ubuntu·架构·ip
学不完的6 小时前
Docker数据卷管理及优化
运维·docker·容器·eureka