一、缓冲区理解:
1.无缓冲:将所得到的信息马上显示出来。
2.行缓冲:输入输出遇到换行才执行的I/O操作,比如键盘操作。
3.全缓冲:输入输出写满缓冲区蔡执行I/O操作。比如磁盘读写。
当我们在实现的时候需要使用fflush(stdout)来刷新缓冲区,以便下一次的输出。
二、fflush的理解:
1.对于输出流,fflush()强制写入给定输出或更新的所有用户空间缓冲数据。
2.对于输入流,fflush()丢弃任何缓冲数据。
这是从底层文件中获取的,但还没有被应用程序消耗掉。流的开放状态不受影响。
三、’\r’和’\n’的区别:
回车用’\r’表示,表示是回到改行的初始位置,换行用’\n’表示,表示直接换到下一行,所以我们需要用’\r’,以此达到进度条的效果。
四、颜色设定及扩展:
1.颜色设定:
#define NONE "\e[0m"
#define RED "\e[0;31m"
#define BLUE "\e[0;34m"
#define GREEN "\e[0;32m"
2.扩展:
编号 | 含义 |
---|---|
40 | 黑色 |
41 | 深红色 |
42 | 绿色 |
43 | 黄色 |
44 | 蓝色 |
45 | 紫色 |
46 | 深绿色 |
47 | 白色 |
控制码 | 作用 |
---|---|
\033[0m | 关闭所有属性 |
\033[1m | 设置高亮度 |
\033[4m | 下划线 |
\033[5m | 闪烁 |
\033[7m | 反显 |
\033[8m | 消隐 |
\033[30m– \033[37m | 设置前景色 |
\033[40m– \033[47m | 设置背景色 |
\033[nA | 光标上移n行 |
\033[nB | 光标下移n行 |
\033[nC | 光标右移n行 |
\033[nD | 光标左移n行 |
\033[y;H | 设置光标位置 |
\033[2J | 清屏 |
\033[K | 清除从光标到行尾的内容 |
\033[s | 保存光标位置 |
\033[u | 恢复光标位置 |
五、sleep和usleep简单介绍:
1,sleep:以秒为单位暂停读秒;
2.usleep:以毫秒为单位暂停读秒;
六、代码实现:
#include <stdio.h>
#include <unistd.h>
#include <string.h>
#define NONE "\e[0m"
#define RED "\e[0;31m"
#define GREEN "\e[0;32m"
#define BLUE "\e[0;34m"
int main()
{
int index = 0;
char str[21];
memset(str,'\0',sizeof(str));
char tmp[5] = {'-','\\','|','/','\0'};
while(index <=20)
{
str[index] = '#';
if(index <=14)
printf(RED"%s[%d%%%c]\r"NONE,str,index*5,tmp[index%4]);
elseif(index<=14)
printf(BLUE"%s[%d%%%c]\r"NONE,str,index*5,tmp[index%4]);
else
printf(GREEN"%s[%d%%%c]\r"NONE,str,index*5,tmp[index%4]);
fflush(stdout);
index++;
usleep(100000);
}
printf("\n");
return 0;
}