news 2026/1/15 5:57:20

fwrite与fflush作用

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
fwrite与fflush作用

简单说: fwrite 负责“写数据”, fflush 负责“把缓冲里的内容真的推到文件/设备”。

一、 fwrite 做什么?

fwrite 是标准 C 里的带缓冲的文件写入函数,原型:

c

size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream);

它的主要作用:

- 从 ptr 指向的内存中,读取 size * nmemb 字节

- 写入到 FILE *stream 对应的文件流中

- 但不一定立刻写到磁盘或设备,通常是写到缓冲区里

常见特点:

- 写入成功返回实际写入的“元素个数”( nmemb 的数量),而不是字节数

- 出错时返回值小于 nmemb

- 对磁盘文件,一般是全缓冲;对标准输出( stdout ),通常是行缓冲(遇到 \n 才刷新)

示例:

c

FILE *fp = fopen("test.txt", "wb");

int a = 123;

fwrite(&a, sizeof(int), 1, fp); // 写入一个 int 到缓冲区

fclose(fp); // 关闭时会自动刷新缓冲区

二、 fflush 做什么?

fflush 是强制刷新文件流缓冲区的函数,原型:

c

int fflush(FILE *stream);

作用:

- 对输出流/更新流:把缓冲区里还没写出去的数据,立即写到底层文件/设备

- 对 NULL :刷新所有打开的输出流

返回值:

- 成功: 0

- 失败: EOF (并设置 errno )

常见用途:

- 在 fwrite 之后、但还不想 fclose 时,确保数据真的写到文件

- 多进程/多线程同时写同一个文件时,控制何时把缓冲数据落盘

- 调试时,避免因为缓冲导致“明明写了但看不到”的情况

示例:

c

FILE *fp = fopen("test.txt", "wb");

fwrite("hello", 1, 5, fp);

fflush(fp); // 强制把缓冲区内容写入文件

// 之后即使程序崩溃,数据大概率已经在文件里

三、 fwrite 和 fflush 的关系与常见坑

1. 关系

- fwrite :把数据从用户内存 → C 库缓冲区

- fflush :把数据从 C 库缓冲区 → 内核缓冲区 → (视系统而定)磁盘

缓冲区满、 fclose 、正常程序退出时,C 库会自动调用类似 fflush 的逻辑,所以很多时候你不手动 fflush 也能看到文件内容。

2. 常见坑

- 只 fwrite 不 fflush ,程序异常退出(崩溃、信号),缓冲区里的数据会丢失

- stdout 是行缓冲,用 printf 但没 \n ,又没 fflush(stdout) ,可能看不到输出

- fflush 对输入流(只读打开的文件)行为是未定义的,不要这么用

示例:

printf("hello"); // 可能不会立刻输出,因为没 '\n'

fflush(stdout); // 现在才保证输出到终端

简单总结: fwrite 是“写到缓冲区”, fflush 是“把缓冲区里的内容立刻写出去”。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2025/12/26 22:10:12

Dubbo vs Spring Cloud 全攻略:核心区别与选型指南

Dubbo vs Spring Cloud 全攻略:核心区别与选型指南 在 Java 微服务领域,Dubbo 和 Spring Cloud 是最主流的两个分布式服务框架。它们并不是互相替代的关系,而是定位和生态不同。 本文将从 四大核心区别 出发,并补充运维、社区、云原生等角度,带你全面理解二者的差异与融合…

作者头像 李华
网站建设 2025/12/31 6:14:08

鸿蒙应用质量狂飙秘籍:全链路测试上线,场景化体验直接开挂

从内容社区到智慧文旅,从金融服务到大众传媒,鸿蒙操作系统以其独特的生态创新能力,正在为千行百业注入新动能。来自知乎、游浙里、苏州银行、央广网、多乐掼蛋、凤凰新闻等一线开发者的实践与数据,共同揭开了HarmonyOS如何以“快一…

作者头像 李华
网站建设 2025/12/26 22:05:52

LLM代理的库学习机制及其持续自我改进能力

LLM代理的库学习机制及其持续自我改进能力 关键词:LLM代理、库学习机制、持续自我改进、知识获取、性能提升 摘要:本文深入探讨了LLM代理的库学习机制及其持续自我改进能力。首先介绍了相关背景,包括目的范围、预期读者等内容。接着阐述了LLM代理的核心概念,给出了原理和架…

作者头像 李华
网站建设 2025/12/26 22:02:13

2025毕业救命指南:全网十大降AI工具真实测评,亲测有效!

家人们,现在学校查得是真严,不仅重复率,还得降ai率,学校规定必须得20%以下... 折腾了半个月,终于把市面上各类方法试了个遍,坑踩了不少,智商税也交了。今天这就把这份十大降AI工具合集掏心窝子…

作者头像 李华