当前位置: 首页 > 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.zskr.cn/news/159658.html

相关文章:

  • 【有搜必应】HarmonyOS 热搜技术问题解析第五期
  • django《Python程序设计》课程智能问答系统 智能AI客服问答系统_88mj5719
  • 分库分表数据源ShardingSphereDataSource的Connection元数据误用问题分析
  • 福特汽车主观评价规范:性能开发的宝藏指南
  • 年末财税稳控,让发票与收入成本“零隐患”
  • django基于Django的在线课程学习平台1_w494xm97
  • 2025专科生必看!10个AI论文工具测评:开题报告文献综述全攻略
  • CS50 week 4 Problems
  • 程序员越往上走,拼的从来不是技术,而是「会说话」的能力
  • 中国猎鹰特卫暖心护航,这场元旦盛会温情满溢~
  • 基于SpringBoot的高校教职工教师健康监护管理系统 企业员工健康管理系统_zohnb572
  • Science | DAP-seq助力揭示CsARF3调控黄瓜雌花形成分子机制
  • 信刻光盘摆渡系统介绍
  • LLM代理的库学习机制及其持续自我改进能力
  • 球幕影院投资成本分析与9D电影设备多少钱一套的综合探讨
  • 2025.12.26
  • 2025年度GEO优化全国服务商排名揭晓 - 源码云科技
  • 2025.12.26日21:51-gratification满意
  • 一、Python核心语句结构(配套答案)
  • 电动汽车动力系统匹配与整车经济性计算模型
  • 中医执医(助理)备考攻略!哪家培训机构实力领跑? - 资讯焦点
  • 鸿蒙后台任务到底该怎么写?TaskPool、Service、WorkScheduler 一次讲透
  • 京东m端 最新滑块逆向 e卡绑定
  • vmware安装ubuntu虚拟机后与主机win10共享文件夹
  • 全国中医师承培训机构哪家好?阿虎医考师承实测真心靠谱 - 资讯焦点
  • 南方湿冷魔法攻击破局指南:羽绒服材质抗冻性能深度解析 - 资讯焦点
  • 西门子1200双套三坐标六轴联动系统:含SCL语言模板、PLC通信与V90伺服驱动,中文注释程...
  • DM8共享集群数据库导出及导入之(dexp/dimp)
  • 探秘文件包含漏洞:从本地挖掘到远程威胁,PHP伪协议成“帮凶”
  • 创建linux虚拟机的初始化步骤