c - 为什么输出后面不能跟输入,反之亦然?
问题描述
来自 APUE
当打开文件进行读写时(类型中的加号),有两个限制。
• 在没有fflush、fseek、fsetpos 或rewind 介入的情况下,输出不能直接跟在输入之后。
• 如果没有中间的 fseek、fsetpos 或 rewind,或者遇到文件结尾的输入操作,则输入不能直接跟随输出。
为什么在这两种情况下都“fseek、fsetpos 或 rewind”?
为什么在第二种情况下“遇到文件结尾的输入操作”?
谢谢。
Linux API 的一个类似问题是`read()` 后面可以直接跟 `write()` 和 `write()` 后面跟 `read()` 吗?
解决方案
使用FILE
流时,读取或写入文件时使用单个内部缓冲区。
在读取和写入之间切换时,必须在切换模式之前清除该缓冲区,否则可能会发生数据丢失。上面提到的每个操作都执行所需的缓冲区刷新。
推荐阅读
- vaadin14 - 在 Vaadin 14/RapidclipseX IMG 组件中访问本地资源(本地目录-项目外)
- python - python redistimeseries 时间戳不能早于时间序列中的最新时间戳
- java - 无法加载 JNotify 本机库(java.library.path 中没有 jnotify)
- java - 如何使用 SpringJUnit4ClassRunner 将映射器(mapstruct)注入到 Junit 测试中
- python - 如何使用python用单词解决行列式矩阵?在python中使用单词x如何解决?
- git - 了解 Visual Studio 中的 git 分支
- python-3.x - 性能问题 boto3 kms 解密方法
- email - PHPMailer 和 DKIM,使用经过身份验证的 SMTP 服务器进行 SPF 验证
- c++ - C++ 中的处理时间
- c# - 如何将透明的winform设置为面板透明面板,以显示为背景?