当前位置:   article > 正文

Linux:进度条程序的详解_fflush进度条

fflush进度条


了解知识

换行(\n)和回车(\r)的区别:
  • <\r>回车(carriage return):即每次打印完使光标回到最开始位置
  • <\n>换行(line feed):换到当前行的下一行,即光标指向下一行最开始的位置
缓冲区概念

缓冲区分为:无缓冲、行缓冲、全缓冲。

  • 无缓冲:表示的是没有缓冲,可以将信息立马显现出来,典型代表是标准错误流stderr。
  • 行缓冲:表示的是输入输出遇到换行才执行真正的I/O操作。典型的代表是键盘的操作。
  • 全缓冲:表示的是输入输出写满缓冲区才执行I/O操作。典型的代表是磁盘的读写

关于行缓冲有3个实例:

在这里插入图片描述

现象是什么?

先打印Hello,world! 三秒后换行打印apple@AppledeMacBook-Pro Linux %
在这里插入图片描述

在这里插入图片描述

现象是什么?

停顿3秒后先打印Hello,world!% (这里为啥跑出来了 % 我也不是很懂),再换行打印apple@AppledeMacBook-Pro Linux %

在这里插入图片描述

在这里插入图片描述

现象是什么?

停顿3秒后先打印Hello,world! ,再换行打印%,并换行打印apple@AppledeMacBook-Pro Linux %

在这里插入图片描述

结论:

printf是一个行缓冲函数,先写到缓冲区,满足条件后,才将缓冲区刷到对应文件中,刷新缓冲区的条件如下:

  1. 缓冲区填满;

  2. 写入的字符中有‘\n’ ,’\r’;

  3. 调用fflush手动刷新缓冲区;

  4. 调用scanf要从缓冲区中读取数据时,也会将缓冲区内的数据刷新;

满足上面4个条件之一缓冲区就会刷新

fflush

功能: 清除读写缓冲区,在需要立即把输出缓冲区的数据进行物理写入时

  • fflush(stdin):刷新标准输入缓冲区,把输入缓冲区里的东西丢弃[非标准]

  • fflush(stdout):刷新标准输出缓冲区,把输出缓冲区里的东西打印到标准输出设备上

usleep

usleep函数能把进程挂起一段时间, 单位是微秒(千分之一毫秒)。本函数可暂时使程序停止执行。头文件:<unistd.h>

进度条小程序

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

int main(){
	char arr[102] = {0};
	const char* lp = "|/-\\";
	for(int i = 0; i < 100; i++){
		arr[i] = '#';
		printf("[%-100s][%d%%][%c]\r", arr, i+1, lp[i % 4]);
		fflush(stdout);
		usleep(100000);
	}
	printf("\n");
	return 0;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

代码生成图
在这里插入图片描述


如有不同见解,欢迎留言讨论~~

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/334804
推荐阅读
相关标签
  

闽ICP备14008679号