fopen()
我已阅读有关使用(链接)打开以进行更新的文件的读取和写入操作(反之亦然)之间的切换
“对于为更新而打开的文件(包含“+”号的文件),在这些文件上允许输入和输出操作,应在随后的写入操作之间刷新(fflush)或重新定位(fseek、fsetpos、rewind)流通过读取操作或未到达文件末尾的读取操作,然后进行写入操作。”
这里提到了两件事,我想强调一下
- 应该在写入操作和读取操作之间刷新(fflush)或重新定位(fseek,fsetpos,rewind)流
- 或未到达文件末尾的读取操作,然后是写入操作。
1)关于第一点,我们是否明确需要在写入和读取操作之间刷新。我的意思是,假设我们打算写入一个新文件,然后再读回它。在这种情况下,使用fseek()
orrewind()
开始写入后的文件是有意义的,并且作为副作用,它将刷新缓冲区。但我想知道的是,如果我们用新数据更新/覆盖已经存在的文件的第一部分会发生什么,但是一旦完成,我们想立即开始读取剩余的旧数据吗?我们是否需要使用类似的东西fseek(pFile,0,SEEK_CUR)
来刷新缓冲区write-read
过渡,同时不改变文件指针的位置?第二种情况也会产生同样的困惑,当我们想要读取文件的前半部分时,然后立即开始在那里写入。请回答这个问题。
2)关于第二部分reading operation which did not reach the end-of-file
似乎暗示如果读取操作到达文件末尾并且我们打算在此之后写入,我们不需要为这个read-write
转换刷新缓冲区。你能确认一下吗是什么意思?只有write-read
转换需要刷新而不是read-write
转换,特别是如果读取已经到达文件结尾?