3.4、Linux小程序:进度条

简介: 3.4、Linux小程序:进度条

回车与换行的概念和区别

换行\n,回车\r

似乎无需多言

行缓冲区概念

这里我们通过例子来简单理解即可,深入理解以后再说

运行结果是什么呢?

先暂停3秒,然后全部输出。

这是因为缓冲区是按照行进行刷新的,在换行的时候会将该行数据刷新到屏幕上,在程序运行结束时会将缓冲区的数据全部刷新,在缓冲区满时也会刷新。

而我们的代码刻意地没有加换行符。

所以我们需要定期刷新,就要用到fflush函数,传stdout,即标准输出,输出到显示屏上。

这一次是打印一次,然后休眠一秒。

进度条代码

version1

const char *str = "-|\\/";
void process()
{
    char arr[NUM] = {0};
    arr[0] = SYMBOL;
    int cnt = 1;
    while(cnt <= 100)
    {
        printf("[%-100s][%3d%%][%c]\r",arr,cnt,str[cnt%4]);
        fflush(stdout);
        Sleep(100);
        arr[cnt++] = SYMBOL;
    }
    printf("\n");
}

version2

#define NUM 104
#define SYMBOL '#'
const char *str = "-|\\/";
#define DownLoadSize (1024*1024*1024) 
void download()
{
    srand((unsigned int)time(NULL));
    double _rate = 0;
    int total = DownLoadSize;
    while(total)
    {
        int speed = rand() % (1024 * 1024) * 100;
        total -= speed;
        if(total < 0)
        {
            total = 0;
        }
        _rate = (DownLoadSize - total) * 1.0  / DownLoadSize * 100;
        process_flush(_rate);
    }
    printf("\n");
}
char arr[NUM] = {0};
void process_flush(double rate)
{
    static int cnt = 0;
    int temp = (int)rate;
    arr[temp] = SYMBOL;
    printf("[%-100s][%.1lf%%][%c]\r",arr,rate,str[cnt%4]);
    fflush(stdout);
    Sleep(100);
    cnt++;
    cnt %= 4;
}

写个主函数调用即可,但是别忘了修改后要make

version3

相较与version2,做了颜色和符号改变

4 #define SYMBOL ' '
 51 char arr[NUM] = {0};
 52 void process_flush(double rate)
 53 {
 54     static int cnt = 0;
 55 
 56     int temp = (int)rate;
 57     if(temp < 100)
 58         arr[temp] = SYMBOL;
 59     
 60     //printf("[\033[0;35;47m%-100s\033[0m][%.1lf%%][%c]\r",arr,rate,str[cnt%4]);
 61     printf("[\033[0;47m%-100s\033[0m][%.1lf%%][%c]\r","",rate,str[cnt%4]);
 62     printf("[\033[0;45m%-s\033[0m\r",arr);
 63 
 64     fflush(stdout);
 65     usleep(100000);
 66 
 67     cnt++;
 68     cnt %= 4;
 69 }

效果如下:

目录
相关文章
|
Linux 开发工具
linux下使用gcp拷贝数据的时候显示进度条
linux下使用gcp拷贝数据的时候显示进度条
337 3
|
小程序
【亲测有效】支持横竖屏 微信小程序video禁止进度条拖动,微信小程序遮罩进度条,
【亲测有效】支持横竖屏 微信小程序video禁止进度条拖动,微信小程序遮罩进度条,
920 1
【亲测有效】支持横竖屏 微信小程序video禁止进度条拖动,微信小程序遮罩进度条,
【make/Makefile】Linux下进度条的设计与实现
【make/Makefile】Linux下进度条的设计与实现
|
小程序 Linux C语言
Linux小程序 —— 进度条
Linux小程序 —— 进度条
|
小程序 Linux 开发工具
【Linux】Linux 开发工具(vim、gcc/g++、make/Makefile)+【小程序:进度条】-- 详解
【Linux】Linux 开发工具(vim、gcc/g++、make/Makefile)+【小程序:进度条】-- 详解
|
数据可视化 小程序 Linux
【Linux】6. 实现进度条和git基本认识和使用
【Linux】6. 实现进度条和git基本认识和使用
223 4
|
缓存 小程序 Linux
【Linux】Linux第一个小程序-进度条
【Linux】Linux第一个小程序-进度条
323 0
|
9月前
|
存储 安全 Linux
Linux卡在emergency mode怎么办?xfs_repair 命令轻松解决
Linux虚拟机遇紧急模式?别慌!多因磁盘挂载失败。本文教你通过日志定位问题,用`xfs_repair`等工具修复文件系统,三步快速恢复。掌握查日志、修磁盘、验重启,轻松应对紧急模式,保障系统稳定运行。
1533 2
|
10月前
|
缓存 监控 Linux
Linux内存问题排查命令详解
Linux服务器卡顿?可能是内存问题。掌握free、vmstat、sar三大命令,快速排查内存使用情况。free查看实时内存,vmstat诊断系统整体性能瓶颈,sar实现长期监控,三者结合,高效定位并解决内存问题。
943 0
Linux内存问题排查命令详解