来自https://stackoverflow.com/a/52068965/156458
在读取和写入之间切换时,必须在切换模式之前清除该缓冲区,否则可能会发生数据丢失。上述操作中的每一个都执行所需的缓冲区刷新。
“这些操作”包括fseek、fsetpos和rewind。
文件定位功能是否在内部刷新输出到设备并清除输入缓存?7.21.5.3p7 in the C standard没有说明。我也没有在文件定位函数的手册页中找到它。
如果不是,为什么要在输出和输入之间调用文件定位函数(如果不是fflush
)?
谢谢。
发布于 2018-08-31 09:06:56
打开文件的更新(+
)模式的描述包含以下详细信息:
当使用update模式('+‘作为上述
mode
参数值列表中的第二个或第三个字符)打开文件时,可以在关联的流上执行输入和输出。然而,如果没有对fflush
函数或文件定位函数(fseek
、fsetpos
或rewind
)的介入调用,则输出之后不应直接跟随输入,并且除非输入操作遇到文件结束,否则不应在没有对文件定位函数的介入调用的情况下直接跟随输出。
因此,虽然这些函数的描述没有明确提到它们会刷新缓冲区,但这个子句暗示了这一点。但它只在使用更新模式时是必需的。
https://stackoverflow.com/questions/52106265
复制相似问题