【探索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):

进度条

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

相关推荐
2601_967987375 小时前
安装 Redis 或 Redis Stack
linux·windows·redis·macos·安装
feng_you_ying_li5 小时前
linux之数据链路层
linux·网络·智能路由器
修己xj6 小时前
服务器无法解析域名?一次 DNS 配置缺失的排查与修复
运维
GeW7 小时前
高端化走到深处,是数据库和Linux的事
linux
程序员初一8 小时前
Linux 远程桌面有四种做法
linux·ssh
程序开发阿元8 小时前
1C1G 能跑什么:把留常驻服务和不留摆进一张内存表
linux·ssh
xbzb11 小时前
自定义 yum 软件源:Linux 上 createrepo,Windows 上纯 Python 也能造
linux·运维·windows·python·yum·createrepo
Android系统攻城狮11 小时前
Linux FFmpeg深度解析之avio_open调用流程与实战(三十八)
linux·运维·服务器·ffmpeg·音视频进阶·ffmpeg音视频
独隅11 小时前
WebStorm Linux 版安装实战与核心效能展示
linux·ide·webstorm
瑞克-桑切斯12 小时前
ERP 企业生产管理系统部署手册
运维·docker·云原生·容器·eureka