You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Linux环境下调用fread返回0且无法读取已写入文件数据的问题

问题成因

  • 完成fwrite写入操作后,文件流的位置指针已经偏移到写入内容的末尾,此时直接调用fread会从文件末尾位置开始读取,自然无法读取到任何数据,返回值为0属于符合预期的行为,不存在系统错误因此perror输出成功提示。
  • C语言标准明确要求,对同一文件流交替执行读写操作时,中间必须通过fflush、文件定位函数(fseek/rewind/fsetpos)完成同步,否则操作行为是未定义的,你的代码没有做这一步切换同步,也会导致读取异常。

修复方案

在fwrite执行完成后、fread调用前,添加文件指针重置的代码即可,两种常用实现方式二选一:

  1. 调用rewind(fp)直接把文件指针重置到文件起始位置
  2. 调用fseek(fp, 0, SEEK_SET)手动将指针偏移到文件起始位置

修复后的核心代码片段

num = fwrite(wr_buf , 1 , sizeof(wr_buf) , fp);
printf("WR num %zu\n", num); // 补充:size_t类型建议用%zu格式化输出,避免64位环境下类型不匹配警告

// 新增指针重置代码
rewind(fp);

num = fread(rd_buf , 1 , sizeof(rd_buf) , fp);
printf("RD num %zu\n", num);
perror("fread");

内容的提问来源于stack exchange,提问作者user14104726

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 15:48:01