Linux在shell下输出进度条



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


准备:

在这之前需要知道换行和回车的区别,即\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;
}



评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值