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结果: