Linux实现进度条小程序(包含基础版本和模拟下载过程版本)

这篇具有很好参考价值的文章主要介绍了Linux实现进度条小程序(包含基础版本和模拟下载过程版本)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Linux实现进度条小程序

1.预备的两个小知识

usleep这个函数的参数是微秒数,作用是让程序休眠对应的微秒数
1秒=1000毫秒
1毫秒=1000微秒
1微妙=1000纳秒
等等等等
因此下面的代码中的
usleep(1000000)=1秒

1.缓冲区

1.缓冲区概念的引出

首先,先让大家看两份代码,分析一下为什么出现这种情况?
Linux实现进度条小程序(包含基础版本和模拟下载过程版本),Linux学习之路,linux,进度条,缓冲区,C语言
Linux实现进度条小程序(包含基础版本和模拟下载过程版本),Linux学习之路,linux,进度条,缓冲区,C语言
请注意:这个代码的运行情况是:先打印的hello world,后休眠了1秒
然后我改动了一个地方,把那个’\n’去掉了
Linux实现进度条小程序(包含基础版本和模拟下载过程版本),Linux学习之路,linux,进度条,缓冲区,C语言
Linux实现进度条小程序(包含基础版本和模拟下载过程版本),Linux学习之路,linux,进度条,缓冲区,C语言
请注意:
这个代码的运行情况是:先休眠了一秒,然后才打印出hello world
为什么会这样呢?

2.缓冲区的概念

Linux实现进度条小程序(包含基础版本和模拟下载过程版本),Linux学习之路,linux,进度条,缓冲区,C语言
注意:程序结束时会自动刷新缓冲区,把缓冲区当中的数据打印出来
Linux实现进度条小程序(包含基础版本和模拟下载过程版本),Linux学习之路,linux,进度条,缓冲区,C语言
Linux实现进度条小程序(包含基础版本和模拟下载过程版本),Linux学习之路,linux,进度条,缓冲区,C语言
此时我们发现,这个代码的hello world就成功地在休眠之前打印出来了

2.回车与换行

1.小例子

其实,回车和换行是不同的
有什么不同呢

比方说:
你现在是一个高中生,你在上作文课,老师要求大家去写一篇作文
你就在作文纸上面去写,你的笔尖就相当于显示器上的光标
你的作文纸就相当于这个显示器
当你写完一段之后,你的笔尖下移:就像这样
Linux实现进度条小程序(包含基础版本和模拟下载过程版本),Linux学习之路,linux,进度条,缓冲区,C语言
光标只进行下移这一个操作,这就叫做:换行

但是真正写作文的时候,我们肯定不能只换行,我们一定要再让笔尖(光标)移动到当前行的最开始处然后再去写(这里不纠结新开一个段落要空两个格),就像这样:
Linux实现进度条小程序(包含基础版本和模拟下载过程版本),Linux学习之路,linux,进度条,缓冲区,C语言
第二个操作我们叫做回车

但是呢,我们的电脑上面的回车键其实完成了两个工作:换行+回车
在我们的旧一些的键盘上回车键就是这么标明的:
Linux实现进度条小程序(包含基础版本和模拟下载过程版本),Linux学习之路,linux,进度条,缓冲区,C语言
其实我们C语言当中的’\n’也是完成了这两个任务:换行+回车
所以我们在日常生活中几乎不会深究这两个概念的区别

那么C语言中有没有回车呢?
当然有啦:‘\r’
不过请注意: '\r’无法自动刷新缓冲区,因此我们需要用刚才提到的fflush库函数来刷新缓冲区

2.倒计时小程序

其实有了上面那两个概念之后,我们就能够写出一个倒计时小程序来了
那应该怎么写呢?
Linux实现进度条小程序(包含基础版本和模拟下载过程版本),Linux学习之路,linux,进度条,缓冲区,C语言
于是我们就可以写出这样的代码
Linux实现进度条小程序(包含基础版本和模拟下载过程版本),Linux学习之路,linux,进度条,缓冲区,C语言
Linux实现进度条小程序(包含基础版本和模拟下载过程版本),Linux学习之路,linux,进度条,缓冲区,C语言
我期待的是10 -> 9 -> 8 …-> 1 -> 0
结果是: 10 -> 90 -> 80 …-> 10 ->00
为什么会出现这种情况呢?
其实我们的显示器是并不会给我们直接打印10这个数字的
而是先打印字符’1’,然后打印字符’0’
连在一起之后我们就会认为那是10
也就是说我们的这个倒计时的过程其实是这样的
Linux实现进度条小程序(包含基础版本和模拟下载过程版本),Linux学习之路,linux,进度条,缓冲区,C语言
每次我们覆盖上一个数据只是覆盖了第一个字符’1’而已
第二个字符’0’一直都没有被覆盖
那我们应该怎么办呢?
我们知道printf是可以控制输出格式的

printf("%2d\r",count);
这样就可以把那个'0'也给覆盖掉了

因此我们可以这样改动代码
Linux实现进度条小程序(包含基础版本和模拟下载过程版本),Linux学习之路,linux,进度条,缓冲区,C语言
Linux实现进度条小程序(包含基础版本和模拟下载过程版本),Linux学习之路,linux,进度条,缓冲区,C语言
倒计时是成功了,但是它这个数字却总是右对齐的,能不能让它左对齐呢?
当然可以啦
只需要加一个-即可

printf("%-2d\r",count);
这样就可以左对齐了

Linux实现进度条小程序(包含基础版本和模拟下载过程版本),Linux学习之路,linux,进度条,缓冲区,C语言
Linux实现进度条小程序(包含基础版本和模拟下载过程版本),Linux学习之路,linux,进度条,缓冲区,C语言
这样我们的倒计时就大功告成了

2.基础版进度条

了解了上面那个倒计时小程序之后,我们先来看一下基础版本的进度条代码该怎么去设计

我们先看一下我完成之后的进度条的样子
Linux实现进度条小程序(包含基础版本和模拟下载过程版本),Linux学习之路,linux,进度条,缓冲区,C语言
首先我们先来完成那个’=‘和’>‘符号的打印
由我们刚才所写的那个倒计时小程序的启发,我们可以这么来设计
Linux实现进度条小程序(包含基础版本和模拟下载过程版本),Linux学习之路,linux,进度条,缓冲区,C语言
至于这个’>‘和这个’='我们在代码里面来控制

1.'='的回车方式的打印

因此我们就可以写出这样的代码

#include "Processbar.h"
//VERSION 1
void Process()
{
    char tmp[NUM]={0};
    int count=0;
    while(count<=100)
    {
        printf("[%-100s]\r",tmp);
        fflush(stdout);
        usleep(50000);
        tmp[count++]=BODY;
        if(count<100)//这里我们在count++之后再去修改tmp数组的下一个内容,保证这个进度条的'>'符号始终在最前方
        {
            tmp[count]=HEAD;
        }
    }
    printf("\n");
}

Linux实现进度条小程序(包含基础版本和模拟下载过程版本),Linux学习之路,linux,进度条,缓冲区,C语言
这里这个main.c的头文件写错了,应该是#include “Process.h”
Linux实现进度条小程序(包含基础版本和模拟下载过程版本),Linux学习之路,linux,进度条,缓冲区,C语言
发现成功运行

2.百分比的打印

这个百分比的打印只需要注意一点

printf("[%-100s][%%%d]\r",tmp,count);
这样就可以打印出%数字了

Linux实现进度条小程序(包含基础版本和模拟下载过程版本),Linux学习之路,linux,进度条,缓冲区,C语言

3.状态提示符的打印

我们这么打印状态提示符
Linux实现进度条小程序(包含基础版本和模拟下载过程版本),Linux学习之路,linux,进度条,缓冲区,C语言
于是就可以写出这样的代码
Linux实现进度条小程序(包含基础版本和模拟下载过程版本),Linux学习之路,linux,进度条,缓冲区,C语言

这里我们只需要注意这个不要忘了%4(对4取余)

还有这个’\‘是C语言当中的转义字符,
例如:’\n’就是’n’被转义为了换行符,
我们想要’\‘字符,就需要对这个转义字符再转义一次,就会得到原字符.
而且’\\'这个字符的大小其实是1个字符的大小

然后我们运行一下
Linux实现进度条小程序(包含基础版本和模拟下载过程版本),Linux学习之路,linux,进度条,缓冲区,C语言
发现成功运行
至此,我们的这个基础版本进度条实现结束
下面我们来看一下升级版本的进度条

3.升级版进度条

1.设计:进度条真实情况

Linux实现进度条小程序(包含基础版本和模拟下载过程版本),Linux学习之路,linux,进度条,缓冲区,C语言

2.模拟下载过程的函数download

Linux实现进度条小程序(包含基础版本和模拟下载过程版本),Linux学习之路,linux,进度条,缓冲区,C语言
在这里我们设计了一个模拟下载过程的函数download
我们定义了文件总大小FILE_SIZE,设置了每一次下载的文件的大小one_size,每次下载所需时间50ms(也就是50000微秒),
然后我们就能得出每次下载之后的剩余所需下载大小total,进而也能得到当前下载的进度rate

把所需的头文件包含到Peocessbar.h当中
Linux实现进度条小程序(包含基础版本和模拟下载过程版本),Linux学习之路,linux,进度条,缓冲区,C语言
然后我们的Processbar.c文件也需要修改
Linux实现进度条小程序(包含基础版本和模拟下载过程版本),Linux学习之路,linux,进度条,缓冲区,C语言
在Process函数中,这个表示进度的count就可以直接对rate取整了,这样就不用之前那个版本当中的while(count<=100)了,这也就是进度条真实情况的一种模拟

接下来我们再来看一下这个升级版进度条的样子
Linux实现进度条小程序(包含基础版本和模拟下载过程版本),Linux学习之路,linux,进度条,缓冲区,C语言
其实这两种进度条的样子是一样的,我们所改的是把第一种的while(count<=100)的循环版本改为了真实情况下的进度条的版本

也就是说我们模拟的那个download函数其实省去了process函数当中的usleep函数,并且process函数中的进度改为由download函数提供

这也才是更加让这个进度条代码符合真实情况

以上就是我们的Linux实现进度条小程序(包含基础版本和模拟下载过程版本)的全部内容,希望能对大家有所帮助!文章来源地址https://www.toymoban.com/news/detail-751740.html

到了这里,关于Linux实现进度条小程序(包含基础版本和模拟下载过程版本)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 『Linux升级路』进度条小程序

    🔥 博客主页: 小王又困了 📚 系列专栏: Linux 🌟 人之为学,不日近则日退 ❤️ 感谢大家点赞👍收藏⭐评论✍️ 目录 一、预备知识 📒1.1缓冲区 📒1.2回车和换行 二、倒计时 📒2.1源代码 📒2.2注意事项 三、进度条 📒3.1源代码 📒3.2实际应用 我们先观察两段代码的现象

    2024年02月05日
    浏览(30)
  • 【Linux旅行记】进度条小程序

    最近,我发现了一个超级强大的人工智能学习网站。它以通俗易懂的方式呈现复杂的概念,而且内容风趣幽默。我觉得它对大家可能会有所帮助,所以我在此分享。点击这里跳转到网站。 🎉博客主页:小智_x0___0x_ 🎉欢迎关注:👍点赞🙌收藏✍️留言 🎉系列专栏:Linux入门

    2024年02月14日
    浏览(27)
  • 【Linux取经路】进度条小程序

    2024年02月14日
    浏览(30)
  • 【Linux】进度条小程序——深度解剖(细节满满)

    ​​​​​ ​ 前言 大家好吖,欢迎来到 YY 滴 Linux系列 ,热烈欢迎! 本章主要内容面向接触过Linux的老铁,主要内容含 欢迎订阅 YY 滴Linux专栏!更多干货持续更新!以下是传送门! 订阅专栏阅读: YY 的《Linux》系列 ❀❀❀❀❀ 【Linux】Linux环境搭建(新手指南,购买,登录)(

    2024年02月14日
    浏览(27)
  • 【Linux】make/Makefile & 进度条小程序

    目录 一,认识 make/makefile 二,实例代码 1,依赖关系 2,原理 3,项目清理 4,测试讲解 三,Linux第一个小程序-进度条 game.h game.c test.c 程序详解   会不会写makefile,从一个侧面说明了一个人是否具备完成大型工程的能力 一个工程中的源文件不计数,其按类型、功能、模块分

    2024年02月05日
    浏览(26)
  • 【Linux】进度条小程序の深度解剖(7)

    ​​​​​ ​ 前言 大家好吖,欢迎来到 YY 滴 Linux系列 ,热烈欢迎! 本章主要内容面向接触过Linux的老铁,主要内容含 欢迎订阅 YY 滴Linux专栏!更多干货持续更新!以下是传送门! 订阅专栏阅读: YY 的《Linux》系列 ❀❀❀❀❀ 【Linux】Linux环境搭建(新手指南,购买,登录)(

    2024年02月06日
    浏览(35)
  • 【Linux】进度条小程序的深度解剖(细节满满)

    ​​​​​ ​ 前言 大家好吖,欢迎来到 YY 滴 Linux系列 ,热烈欢迎! 本章主要内容面向接触过Linux的老铁,主要内容含 欢迎订阅 YY 滴Linux专栏!更多干货持续更新!以下是传送门! 订阅专栏阅读: YY 的《Linux》系列 ❀❀❀❀❀ 【Linux】Linux环境搭建(新手指南,购买,登录)(

    2024年02月16日
    浏览(25)
  • 【闪击Linux系列P7】进度条小程序の深度解剖

    ​​​​​ ​ 前言 大家好吖,欢迎来到 YY 滴 Linux系列 ,热烈欢迎! 本章主要内容面向接触过Linux的老铁,主要内容含 欢迎订阅 YY 滴Linux专栏!更多干货持续更新!以下是传送门! 订阅专栏阅读: YY 的《Linux》系列 ❀❀❀❀❀ 【Linux】Linux环境搭建(新手指南,购买,登录)(

    2024年02月13日
    浏览(31)
  • [Linux]手把手教你制作进度条小程序

    C语言中字符分为两种: 可显字符 控制字符 其中可显字符就是字符a这类的字符,控制字符就是n这种控制字符。 对于我们制作进度条,我们只需要关注两个控制字符: r – 进行回车操作 n – 进行换行加回车操作 说明: n本身是换行字符,但是C语言本身将其解析成了换行加回

    2024年02月14日
    浏览(36)
  • 手把手教你如何在Linux下写进度条小程序(附源码)

    录屏2023 进入ProgressBar这个目录之后,使用ls命令查看是否创建成功 编写makefile文件是为了,使用make命令构建我们的.c文件,生成可执行程序 把源码复制粘贴到我们对应的文件中 使用vim指令先打开头文件 按小写i,进入插入模式(Insert),直接拷贝上去 再按esc,直接输入:wq(

    2024年02月04日
    浏览(32)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包