当前位置: 首页 > news >正文

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 是“把缓冲区里的内容立刻写出去”。

http://www.jsqmd.com/news/145169/

相关文章:

  • 知网AIGC爆红怎么办?这十大好用的降AI神器助你安全上岸
  • 信刻光盘摆渡系统介绍
  • 专治知网“越改越红”!大学生必看的十大降AI工具避坑榜
  • django《Python程序设计》课程智能问答系统 智能AI客服问答系统_88mj5719
  • 分库分表数据源ShardingSphereDataSource的Connection元数据误用问题分析
  • 基于SpringBoot的高校教职工教师健康监护管理系统 企业员工健康管理系统_zohnb572
  • 学长亲荐10个AI论文工具,研究生论文写作必备!
  • 【有搜必应】HarmonyOS 热搜技术问题解析第五期
  • 若依审批流-转交
  • git常用技能之如何把本地的代码推送到远程仓库(码云)
  • 一些坑点
  • 2025专科生必看!10个AI论文工具测评:开题报告文献综述全攻略
  • 程序员越往上走,拼的从来不是技术,而是「会说话」的能力
  • PostgreSQL WAL 完整理解与生产运维终极指南
  • 中国猎鹰特卫暖心护航,这场元旦盛会温情满溢~
  • STL和string实现 - 指南
  • Science | DAP-seq助力揭示CsARF3调控黄瓜雌花形成分子机制
  • LLM代理的库学习机制及其持续自我改进能力
  • 想转WebGIS开发?这份学习路线你一定要看!
  • Photoshop - Photoshop 工具栏(43)标尺工具
  • 2025毕业救命指南:全网十大降AI工具真实测评,亲测有效!
  • 搜索数据库表的性能优化过程
  • Expo Router
  • 揭示宝宝敏感肌纸尿裤护理指南:宝宝敏感肌纸尿裤哪个牌子靠谱|五大靠谱敏感肌纸尿裤品牌专业推荐 - 速递信息
  • 2025.12.26日21:51-ascertain确定;查明;探知
  • 球幕影院投资成本分析与9D电影设备多少钱一套的综合探讨
  • 2025 MBA必备9个降AI率工具测评榜单
  • 2025.12.26
  • 2026执医考生千万注意!老师这5种教学风格,决定你能否上岸! - 资讯焦点
  • CRMEB 多商户系统(Java)v2.2更新预告