首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >【Linux操作系统】如何实现Linux中软件安装进度条?

【Linux操作系统】如何实现Linux中软件安装进度条?

作者头像
MicroFrank
发布2023-01-16 10:51:30
发布2023-01-16 10:51:30
1.4K0
举报
文章被收录于专栏:同步文章1234同步文章1234

文章目录

  • 一.回车与换行
  • 二.缓冲区问题
  • 三.倒计时小程序
  • 四.进度条小程序

Linux下安装软件时,经常会看到类似上图的进度条,今天带大家用C语言来演示其原理!

一.回车与换行

俗话:回车换行,实际是回车和换行的组合

  • 回车是回到当前行的最开始,字符表示:‘\r
  • 换行是换到下一行的当前位置,字符表示:‘\n

但一般在C/C++等语言范畴,用‘\n’来表示回车+换行

二.缓冲区问题

先来看两段简单代码,比较观察现象:

第一段代码:带\n

运行结果:先打印,再sleep3秒

第二段代码:不带\n

运行结果:先sleep3秒,再打印

现象分析:

实际上,由于我们的程序是顺序结构,一定会先执行printf,再执行sleep,但是printf语句执行并不意味着就会先打印到外设!

printf执行后,没有打印到外设,实际上要打印的内容被放到叫做“缓冲区”的区域,这里不细讲,缓冲区要经过刷新后才能将要打印的内容显示到显示器上!

我们上面‘\n’采用的实际上是一种行缓冲的策略,先按照一行保存要打印的内容,知道遇到行刷新的指令时,按行刷新

对代码2解决办法:fflush(stdout)强制刷新

ps:

  • fflush函数头文件: stdio.h,参数:标准输出流
  • sleep函数头文件: unistd.h,参数采用单位:秒

三.倒计时小程序

实现一个新年倒计时小程序:

同样的,先来看两段简单代码,比较观察现象:

第一段代码:printf不带格式控制

运行结果:哈哈哈哈哈,这是倒计时吗?

第二段代码:printf带格式控制

四.进度条小程序

终于到我们的大Boss了,升级打怪!!!

代码语言:javascript
复制
  #include<stdio.h>    
  #include<string.h>    
  #include<unistd.h>    
  #define NUM 4    
  char style[NUM]={'-','#','*','>'};    
  int main()    
  {    
    int cnt=0;                                                                                                              
    char bar[102];    
    const char* str="|/-\\";    
    memset(bar,'\0',sizeof(bar));    
      
    //100次    
    while(cnt<=100)    
    {    
      printf("[%-100s] [%d%%] [%c]\r",bar,cnt,str[cnt%4]);    
      fflush(stdout);    
E>    bar[cnt++]=style[N];    
      usleep(100000);    
    }    
    printf("\n");    
    return 0;    
  }

值得注意的几个细节:

  1. 整个进度条完成从0-100的时间控制:10s,10* 1000* 10000 /100=10000ms
  2. printf(“%-100s”,bar);100表示预留100域宽,-代表向左对齐
  3. 通过gcc test.c -o test -DN=1/2/3/4来完成预定义宏,从而实现多种进度条样式的切换
  4. ‘\’和‘%%’用到了转义字符的转义
  5. 审美问题:最后进度条完成后打印一个换行‘\n’
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-01-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 文章目录
  • 一.回车与换行
  • 二.缓冲区问题
  • 三.倒计时小程序
  • 四.进度条小程序
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档