Linux基础实现一个简单的进度条
Posted Ricky_0528
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux基础实现一个简单的进度条相关的知识,希望对你有一定的参考价值。
文章目录
一、预备知识
- 换行和回车的区别
- \\r:回车,回到当前行的行首,而不会换到下一行,如果接着输出的话,本行以前的内容会被逐一覆盖,如果之前的内容比下一次来的的内容长,就不会被完全覆盖
- \\n:换行,换到当前位置的下一行,而不会回到行首
#include <stdio.h>
#include <unistd.h>
int main()
//printf("hello\\n");
printf("hello");
sleep(5);
return 0;
-
printf已经执行,但是数据没有被立即刷新到显示器中,没有遇到\\n字符串会暂时保存在用户C语言级别的缓冲区,然后再由缓冲区刷新到显示器中,如果一直未遇到就直到程序结束才会被刷新出来
显示器设备刷新策略就是行刷新,即遇到\\n即进行刷新
C程序默认会打开三个输入输出流:
stdin,stdout,stderr
键盘 显示器 显示器
可以使用头文件 unistd.h 下的 fflush 来刷新输出缓冲区 stdout
#include <stdio.h>
#include <unistd.h>
int main()
//printf("hello\\n");
printf("hello");
fflush(stdout); //刷新输出缓冲区
sleep(5);
return 0;
二、简单的倒计时
#include <stdio.h>
#include <unistd.h>
int main()
int count = 20;
while (count)
printf("%2d\\r", count); //因为一共是两个字符,所以需要预留出两个字符的位置
fflush(stdout);
count--;
sleep(1);
return 0;
三、实现
#include <stdio.h>
#include <unistd.h>
#include <string.h>
#define NUM 100
int main()
char bar[NUM + 1];
memset(bar, '\\0', sizeof(bar));
const char* label = "|/-\\\\";
int i = 0;
while (i <= NUM)
printf("[%-100s][%3d%%] %c\\r", bar, i, label[i % 4]);
fflush(stdout);
bar[i] = '#';
usleep(50000);
i++;
printf("\\n");
return 0;
以上是关于Linux基础实现一个简单的进度条的主要内容,如果未能解决你的问题,请参考以下文章