串口开发函数之fflush()-笔记

  fflush 是 C 语言标准库中的一个函数,它用于清空输出缓冲区或输入缓冲区,强制将缓冲区内的数据立即写入文件或输出流。这个函数通常用于确保数据已经从程序传输到目的地,而不是仍然留在内存中的缓冲区。

函数原型:

int fflush(FILE *stream);

参数:

  • stream:指向 FILE 对象的指针,该 FILE 对象代表一个打开的文件流。

返回值:

  • 成功时,返回 0
  • 失败时,返回 EOF(End Of File)并设置 errno 以指示错误原因。

使用场景:

        1、输出缓冲区清空:当你使用 printf 或其他输出函数写入文件或终端时,数据可能不会立即写入目标,而是暂时存储在缓冲区中。如果你希望在程序继续执行之前确保数据已经被写入,可以使用 fflush

FILE *fp = fopen("output.txt", "w");
if (fp != NULL) {
    fprintf(fp, "Hello, World!");
    fflush(fp); // 确保 "Hello, World!" 被写入文件
    fclose(fp);
}

       2、输入缓冲区清空fflush 也可以用于清空输入缓冲区,这在某些情况下可能有助于移除未处理的输入数据。

int c;
printf("Press Enter to continue...\n");
while ((c = getchar()) != '\n' && c != EOF) {
    ; // 忽略输入
}
fflush(stdin); // 清空输入缓冲区

注意事项:

  • fflush 只对输出流(如文件和终端输出)有效。对于输入流(如键盘输入),fflush 的行为是未定义的,但可以尝试用于清空输入缓冲区。
  • 如果在网络编程中使用 fflush,请注意它只确保数据被发送到 TCP 缓冲区,并不保证数据已经被对方接收。
  • 在某些情况下,fflush 可能会导致性能问题,因为它减少了缓冲操作的效率。因此,应当在确实需要时才使用 fflush
  • 使用 fflush 清空输入缓冲区(fflush(stdin))在不同的系统和编译器中行为可能不一致。在某些系统上,这可能导致未定义的行为或错误。在 C11 标准中,fflush 对于输入流是不允许的。

        fflush 是一个有用的工具,可以帮助你控制数据的流动和确保数据的及时写入。然而,应当谨慎使用,以避免不必要的性能损失。

 

  • 5
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值