当前位置:   article > 正文

【Linux】实现进度条的两种方式(C语言实现)_linux开发板上显示进度条怎么设置

linux开发板上显示进度条怎么设置


前言

回车(\r):让光标回到当前行的最左端
换行(\n):让光标回到下一行的最左端,同时刷新缓冲区

makefile文件的建立以及使用:
在这里插入图片描述

一、简单写法

1.processbar.h

#pragma once                                                                                                                                                   
                                                                                                                                                                
  #include<stdio.h>                                                                                                                            
   #define NUM 102                                                                                                                              
   #define TOP 100                                                                                                                                         
   #define BODY '='                                                                                    
   #define RIGHT '>'                                                                                                                            
                                                                                                                                                                                                                
   extern void processbar(int speed);
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

2. processbar.c

#include"processbar.h"
   #include<string.h>
   #include<unistd.h>
  const char *lable="|/-\\";
  
   void processbar(int speed){
     char bar [NUM];
     memset(bar,'\0',sizeof(bar));
     int len=strlen(lable);
   int cnt=0;
    while(cnt<=TOP){
      printf("[%-100s][%d%%][%c]\r",bar,cnt,lable[cnt%len]);
      //打印的时候在【】内预留100个位置,并且左靠齐打印
      //lable【cnt%len】模拟下载的动态效果
      //并且打印完一次后让光标对齐到最左侧,为下一次覆盖打印做铺垫
     fflush(stdout);
    bar[cnt++]=BODY;
    if(cnt<100){
      bar[cnt]=RIGHT;
   }
    usleep(speed);
    //进行休眠
   }
    printf("\n");
  }                
  • 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

3.main.c

 #include"processbar.h"
   #include<unistd.h>
   int main(){
  processbar(10000);                                                                                                                                                                                            
    return 0;
 }

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

二、使用回调函数

1.processbar.h

#include<stdio.h>
   #define NUM 102
  #define TOP 100
  #define BODY '='
   #define RIGHT '>'
  extern void processbar(int rate);
   extern void init();    
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

2. processbar.c

#include"processbar.h"
   #include<string.h>
   #include<unistd.h>
   const char *lable="|/-\\";
   char bar[NUM];
   void processbar(int rate){
     if(rate<0||rate>100){
       return ;
     }
    int len=strlen(lable);
    printf("[%-100s][%d%%][%c]\r",bar,rate,lable[rate%len]);
   fflush(stdout);
   bar[rate++]=BODY;
    if(rate<100){
     bar[rate]=RIGHT;
   }
 
 }
 
  void init(){
 //重新初始化,清空数组内容
      memset(bar,'\0',sizeof(bar));                                                                                                                                                                             
  }

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24

3.main.c

#include"processbar.h"
   #include<unistd.h>
   typedef void (*callback_t)(int);
   //类型为void (* )(int)的函数指针
   void DownLoad(callback_t   cb){
   int total=1000;
   int cur=0;
  while(cur<=total){
     usleep(50000);
    int rate=cur*100/total;
    //算出比例
   cb(rate);
   //每次cur增加都调用一次cb函数
   //也就是processbar函数
   cur+=10;
  }
  printf("\n");
  }
  
 
 int main(){
    DownLoad(processbar);
    init();
    DownLoad(processbar);                                                                                                                                                                                       
    return 0;
  }

  • 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
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/950195
推荐阅读
相关标签
  

闽ICP备14008679号