news 2026/4/18 1:59:16

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进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/18 1:57:14

《告别跨端运算偏差:游戏确定浮点数学库的核心搭建指南》

早期涉足游戏开发时,曾执着于浮点精度的极致提升,认为更高的精度就能消除所有差异,直到在一款多人协作游戏的测试中,见证过同一技能在PC端与移动端的伤害结算偏差、主机玩家与手机玩家看到的角色跳跃轨迹分歧—明明是相同的触发条件,却出现技能命中判定失效、物理道具飞行…

作者头像 李华
网站建设 2026/4/7 4:03:26

PostgreSQL ORDER BY 详解

PostgreSQL ORDER BY 详解 在数据库查询中,ORDER BY 子句是一个常用的工具,它允许用户根据一列或多列的值对结果集进行排序。本篇文章将深入探讨 PostgreSQL 中的 ORDER BY 子句,包括其基本用法、排序规则、以及如何处理不同的排序需求。 基本用法 在 PostgreSQL 中,使用…

作者头像 李华
网站建设 2026/4/15 22:08:20

PostgreSQL WAL 完整理解与生产运维终极指南

🧠 PostgreSQL WAL 完整理解与生产运维终极指南 WAL(Write-Ahead Logging,预写式日志) 是 PostgreSQL 的 心脏。 它同时承担:事务持久化 崩溃恢复 PITR备份恢复 流复制同步 写性能优化。 理解 WAL,本质就是理解 PostgreSQL 为什么能安全可靠且性能高。 🧩 一、什…

作者头像 李华
网站建设 2026/4/17 6:40:05

信刻光盘摆渡系统介绍

信刻摆渡系统通过安全检测符合要求,获得网络安全专用产品安全检测证书。信刻光盘摆渡系统依托软硬件相结合的技术,从单向传输、数据光盘安全摆渡到跨网交换,全面覆盖跨网数据全自动单向/导出、数据交换的多场景关键环节。产品具备多台刻录光驱…

作者头像 李华
网站建设 2026/4/1 23:17:32

球幕影院投资成本分析与9D电影设备多少钱一套的综合探讨

在本文中,我们将全面分析球幕影院的投资成本,包括每个环节所需的预算。首先,设备采购是重点,购买高质量的设备是保证影院吸引力和观众体验的基础。接着,场地的装修要求通过合理设计来优化观众体验,提升影院…

作者头像 李华
网站建设 2026/4/5 20:56:42

想转WebGIS开发?这份学习路线你一定要看!

新手人群一般来说,学习WebGIS开发的人员有两类。其中较为庞大的群体是3S(GIS、RS、GNSS)及相关专业的学生或从业人员;另一类是计算机专业的学生还有一些其他专业的人士也对进入 WebGIS 开发行业感兴趣,这里不多赘述。这…

作者头像 李华