为了账号安全,请及时绑定邮箱和手机立即绑定

为什么在更新模式下读写之间总是需要fseek或fflush?

为什么在更新模式下读写之间总是需要fseek或fflush?

C
慕侠2389804 2019-12-04 12:58:51
问:我正在尝试通过使用fopenmode "r+",读取特定字符串并写回修改后的字符串来就地更新文件,但是它不起作用。答:请确保fseek在编写之前先进行调用,这两者都将返回到您要覆盖的字符串的开头,并且因为在读/写“ +”模式下读写之间始终需要使用fseek 或fflush。我的问题是,为什么 fseek或fflush总是需要在读/写“ +”模式下进行读写?Andrew Koenig的C Traps and Pitfalls(1989)的5.2节 提到这是由于向后兼容性问题。谁能详细解释?
查看完整描述

3 回答

?
一只甜甜圈

TA贡献1836条经验 获得超5个赞

该库缓冲输入和输出操作。签出setvbuf()该功能的_IOFBF和_IOLBF参数。


fseek()或fflush() 要求库提交缓冲的操作。


该标准将查找或刷新操作指定为强制性操作,以允许库提供一些快捷方式。否则,对于每个I / O操作,库都必须检查先前的操作是否也是读操作(或写操作),并且如果I / O的“方向”发生更改,则库自身将触发刷新。在保持规范不变的情况下,库可以假定客户端在更改I / O方向之前进行了查找/刷新。


查看完整回答
反对 回复 2019-12-04
?
吃鸡游戏

TA贡献1829条经验 获得超7个赞

因为它使OS /库代码更简单。文件流可能具有单独的读取写入缓冲区,因此需要付出额外的努力来确保它们始终保持同步。这会在不需要的时候降低性能。

因此,程序员需要在需要时明确地执行此操作。


查看完整回答
反对 回复 2019-12-04
  • 3 回答
  • 0 关注
  • 754 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信