1. 程式人生 > >Linux在shell下輸出進度條

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;
}