gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 16:37:44 24 4
gpt4 key购买 nike

Q: I'm trying to update a file in place, by using fopen mode "r+", reading a certain string, and writing back a modified string, but it's not working.

A: Be sure to call fseek before you write, both to seek back to the beginning of the string you're trying to overwrite, and because an fseek or fflush is always required between reading and writing in the read/write "+" modes.

我的问题是为什么 fseekfflush 在读取/写入“+”模式下读取和写入之间总是需要?第 5.2 节安德鲁·科尼格的 C Traps and Pitfalls (1989) 提到这是因为向后兼容性问题。谁能详细解释一下?

最佳答案

缓冲 输入和输出操作。查看 setvbuf() 和该函数的 _IOFBF_IOLBF 参数。

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

该标准指定在更改 I/O 方向之前必须执行查找或刷新操作(刷新缓冲区)以允许库使用一些快捷方式。如果没有这个限制,库将不得不检查每个 I/O 操作如果前一个操作是相同的方向(读/写),并且如果 I/O 方向改变则自行触发刷新. 有了原样的限制,库可能会假定客户端在更改 I/O 方向之前执行了查找/刷新,并且可以省略方向检查。

关于c - 为什么在更新模式下读取和写入之间总是需要 fseek 或 fflush?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1713819/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com