问:我正在尝试通过使用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方向之前进行了查找/刷新。
吃鸡游戏
TA贡献1829条经验 获得超7个赞
因为它使OS /库代码更简单。文件流可能具有单独的读取和写入缓冲区,因此需要付出额外的努力来确保它们始终保持同步。这会在不需要的时候降低性能。
因此,程序员需要在需要时明确地执行此操作。
- 3 回答
- 0 关注
- 754 浏览
添加回答
举报
0/150
提交
取消