红联Linux门户
Linux帮助

Linux环境下写一个进度条

发布时间:2016-09-04 10:32:55来源:linux网站作者:饭饭yes
源代码:
void prog()
{
char prog_buf[102];
memset(prog_buf,'\0',sizeof(prog_buf));
char *sign="|/-\\";    //在进度条推进的时候,光标在以顺时针旋转
int i=0;
for(i=0;i<=100;i++)
{
prog_buf[i]='=';
printf("[%-101s][%%%d][%c]\r",prog_buf,i,sign[i%4]);  
//显示进度条进度,[%-101s]表示显示的时候预留101个位置,-表示输出的时候左对齐,\r表示每次循环输出的时候回到上一次输出的位置
fflush(stdout);
usleep(100000);
}
printf("\n");
}
 
***********************prog.c文件内容***********************
Linux环境下写一个进度条
***********************main.c文件内容***********************
Linux环境下写一个进度条
***********************prog.h文件内容***********************
Linux环境下写一个进度条
***********************makefile文件内容***********************
Linux环境下写一个进度条
***********************进度条推进***********************
Linux环境下写一个进度条
Linux环境下写一个进度条
 
为什么会用到fflush函数?
请先看下面的例子
int main()
{
printf("hello bit\n");
sleep(3);
return 0;
}
结果:先打印hello bit,再睡3秒,再返回
int main()
{
printf("hello bit");
sleep(3);
return 0;
}
结果:先睡3秒,再打印,再返回
int main()
{
printf("hello bit");
fflush(stdout);   //刷新标准输出缓冲区中的内容
sleep(3);
return 0;
}
结果:先打印,再睡3秒,再返回。
原因:标准输出默认为行缓冲,以\n为尾打印,若是没有\n,则先把输出内容写入输出缓冲区。
在写进度条的时候,我们并不希望在下一次循环中换行输出,所以,输出的内容会先写到标准输出缓冲区中,所以需要用用fflush刷新标准输出缓冲区的内容输出。
 
本文永久更新地址:http://www.linuxdiyf.com/linux/23878.html