linux下進度條的原理:
1、Linux下的回車換行
換行:不換行,光標到下一行當前位置
回車:光標移動到當前行行首
\n:Linux下的回車換行,發現\n後將包含\n的所有內容輸出到緩衝區
\r:只回車不換行,到當前行的行首
2、fflush()函數
在printf()後使用fflush(stdout)的作用是立刻將要輸出的內容輸出。
當使用printf()函數後,系統將內容存入輸出緩衝區,等到時間片輪轉到系統的輸出程序時(如果此時進程休眠,將無法看到輸出),將其輸出。
使用fflush(stdout)後,立刻清空輸出緩衝區,並把緩衝區內容輸出。
首先,建立一個makefile目錄,touch一個proc_bar.c文件,代碼如下:
#include<stdio.h>
#include<string.h>
int main()
{
int i=0;
char bar[102];
bar[0]='\0';
const char* lable="-\\|/";
while(i<=100)
{
printf("[%-100s][%d%%][%c]\r",bar,i,lable[i%4]);
bar[i]='#';
i++;
bar[i]='\0';
fflush(stdout);
usleep(100000);
}
return 0;
}
makefile下編寫Makefile文件
mytest:proc_bar.c
gcc proc_bar.c -o mytest
.PHONY:clean
clean:
rm proc_bar.c proc_bar.o proc_bar.i proc_bar.s
運行mytest結果: