问:我正在尝试更新
放置,使用fopen
模式"r+"
,
读某个字符串,然后写
返回修改过的字符串,但不是
工作。
A:一定要在
你写信,都是为了寻找
你正在尝试的字符串的开头
因为一个fseek
或
读写中的读写
“+”模式。
我的问题是为什么在读/写“+”模式下读和写之间总是需要fseek
或fflush
?第5.2节
安德鲁·柯尼格的
C Traps and Pitfalls(1989)提到这是因为向后兼容性问题。有人能详细解释一下吗?
最佳答案
库缓冲输入和输出操作。查看该函数的setvbuf()
和_IOFBF
,_IOLBF
参数。fseek()
或fflush()
要求库提交缓冲操作。
该标准将seek或flush操作指定为强制操作,以允许库使用某些快捷方式;否则,对于每个i/o操作,lib都必须检查前一个操作是否也是read op(或write op),如果i/o的“方向”发生更改,则lib必须自己触发flush。在规范不变的情况下,库可以假设客户机在更改I/O方向之前进行了查找/刷新。
关于c - 为什么在更新模式下读写之间总是需要fseek或fflush?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1713819/