博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Linux在shell下输出进度条
阅读量:4222 次
发布时间:2019-05-26

本文共 1319 字,大约阅读时间需要 4 分钟。

无论下载,解压缩,复制等情况时,我们总能看到进度条这种东西。进度条以图片形式的可视化窗口直观的显示出计算机处理当前任务的速度,完成度,剩余完成的任务量,以及需要的时间等信息,所以在此我们可以自主实现一个简易的进度条小程序。

准备:

在这之前需要知道换行和回车的区别,即\r和\n。在linux中 \r  让光标回到当前行的开始,\n让光标从下一行开始。还需要知道linux中 缓冲区写满后才会输出。

思路:

      我们通过一个数组,每加载成功一次,数组会多出现一个标示。由于进度条是在一行内进行的,故我们需要回车,不需要换行,通过“\r”实现。

1、进度条由0%~100%,在字符数组中,输出一串字符时,最后以“\0”结束的,故需要一个大小为102的数组,加载成功的数据用“#”表示。

2、进度条会出现一个区间,然后在里面进行加载,故先用“【”和“】”表示加载的区间。

3、定义一个rate标识进度,每进行一次加一,直到100时停止。

4、在进行回车前,需要进行刷新。

5、在加载进度时,通过sleep()或usleep()控制睡眠时间,sleep表示秒,usleep表示微秒。

6、对于加载中旋转的小圈通过“-\\|/”进行。

效果如下:

代码如下:

/*************************************************************************

    > File Name: proc_bar.c
    > Author: huozhigang
    
    > Created Time: Thu 16 Feb 2017 02:15:49 AM PST
 ************************************************************************/
 
#include<stdio.h>
#include<unistd.h> // sleep() 以秒睡眠  usleep()以微秒睡眠 1s = 10^6ms 
 
void proc_bar()
{
    int count = 0; // 记录百分比数
    char buf[102]={'\0'};  // 存储0 - 100  101个‘#’ 和 '\0'
    const char* stat = {"-\\|/"}; // 存储标志正在工作 假装在“旋转“
    while( count<=100 )
    {
        // -101 是为了固定两个括号之间的距离不变
        printf("[%-101s][%%%d]%c\r",buf, count, stat[count%4]);
        fflush(stdout);
        buf[count++] = '#';
        usleep(10000);
 
    }
    printf("\n");
}
 
int main()
{
    proc_bar();
    return 0;
}

--------------------- 

作者:春风来不来 
来源:CSDN 
原文:https://blog.csdn.net/a1414345/article/details/55270884 
版权声明:本文为博主原创文章,转载请附上博文链接!

你可能感兴趣的文章
python语言程序设计基础笔记(三)从题目到方案
查看>>
读取txt文件出现出现多余空行问题
查看>>
从理论到实践开发自己的聊天机器人
查看>>
@***装饰器(python)
查看>>
我的2020
查看>>
2.3 WSN的MAC协议
查看>>
栈与队列的应用——计算表达式的值
查看>>
BFS——求矩阵中“块”的个数
查看>>
BFS——走迷宫的最小步数
查看>>
并查集——好朋友
查看>>
关键路径
查看>>
Web前端学习笔记——JavaScript之事件详解
查看>>
Web前端学习笔记——JavaScript之事件、创建元素、节点操作
查看>>
Web前端学习笔记——JavaScript之正则表达式、伪数组、垃圾回收
查看>>
Web前端学习笔记——JavaScript 之继承、函数进阶
查看>>
Web前端学习笔记——JavaScript之面向对象游戏案例:贪吃蛇
查看>>
不做单元测试?小心得不偿失!嵌入式系统单元测试工具,自动生成测试用例
查看>>
一种实用的联网汽车无线攻击方法及车载安全协议
查看>>
光靠欺骗检测是不够的:对抗多目标跟踪的攻击
查看>>
基于微区块链的V2X地理动态入侵检测
查看>>