为什么输出不能跟随输入,反之亦然?

Tim*_*Tim 5 c linux

来自APUE

当打开文件进行读写(类型中的加号)时,有两个限制.

•如果没有干预fflush,fseek,fsetpos或倒带,输出不能直接输入.

•输入不能直接跟随输出而没有介入的fseek,fsetpos或倒带,或者遇到文件结束的输入操作.

为什么在这两种情况下"fseek,fsetpos或倒带"?

为什么在第二种情况下"输入操作遇到文件结束"?

谢谢.

Linux API的一个类似问题是可以`read()`直接后跟`read()`和`read()`的`write()`?

dbu*_*ush 4

使用流时FILE,在读取或写入文件时会使用单个内部缓冲区。

在读取和写入之间切换时,必须在切换模式之前清除该缓冲区,否则可能会发生数据丢失。上述每个操作都会执行所需的缓冲区刷新。

  • @Tim 另外,有一种感觉,限制并不繁重。似乎很少有程序需要在同一位置读取,然后切换到写入,反之亦然。无论如何,大多数既读又写的随机访问程序在从读变为写时往往自然地必须寻找新的位置。 (2认同)