首页 > 解决方案 > 为什么输出后面不能跟输入,反之亦然?

问题描述

来自 APUE

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

• 在没有fflush、fseek、fsetpos 或rewind 介入的情况下,输出不能直接跟在输入之后。

• 如果没有中间的 fseek、fsetpos 或 rewind,或者遇到文件结尾的输入操作,则输入不能直接跟随输出。

为什么在这两种情况下都“fseek、fsetpos 或 rewind”?

为什么在第二种情况下“遇到文件结尾的输入操作”?

谢谢。

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

标签: clinux

解决方案


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

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


推荐阅读