实现定义的文件流同步 - 原因
Implementation-defined synchronization of file streams - Why?
使输入文件流的同步特定于实现的基本原理是什么?流会用来自外部设备的内容填充其缓冲区(部分或全部)似乎不是很明显吗?它在标准C++ IOStreams和Locales中说:
对于输出文件,同步定义为通过将缓冲区内容写入由调用
overflow()
执行的文件来清空内部缓冲区。对于输入文件,同步的含义不是由标准定义的,而是取决于 IOStreams 库的实现。
使实现对称并让输入文件流的缓冲区调用underflow()
还不够吗?做出这个决定的原因是什么?
写入具有更改文件的副作用,并且多个写入器竞相写入同一文件并不少见。同时写入和读取文件也是一个常见的用例。该标准基本上说overflow()
进行write()
系统调用(而不是缓冲fwrite()
)以将同步委托给操作系统。
读取对文件没有副作用(它可能会及时更新以变得迂腐),多个阅读器不会相互竞争,因此不需要同步。
另一方面,读取管道或套接字具有更改基础缓冲区内容的副作用。但是,竞争从同一管道,TCP或流UNIX套接字读取的读者没有多大意义。这对于数据报套接字可能有意义,但我不确定流的IOStreams是否设计用于数据报套接字。我收集标准编写器无法提出一个好的读取同步用例,因此未指定。
相关文章:
- 如何找出GDB的SIGTRAP核心转储的根本原因
- 我正在使用嵌套的while循环来解析具有多行的文本文件,但由于某种原因,它只通过第一行,我不知道为什么
- LNK2038、MSVS2017 MAGMA的原因列表
- 为什么它不适用于Visual 2019的原因
- 松弛原子与无同步情况下的记忆连贯性
- 我无法缩小此分段错误的原因
- 使用QQuickFramebufferObject时同步数据的最佳方式是什么
- 链表中写入访问冲突的未知原因
- 是什么原因导致它无法编译?它是声明签名还是在函数本身的实现中
- 初始化或分配空字符串文字到指向 C 中的 char 的指针或指向 C++ 中 const char 的指针的原因是什么
- 在C++中同步线程
- 与 stdio 同步是否使程序 I/O 非交互式?
- 在Arduino中将PWM通道命名为LEDC是否有特定原因
- 共享指针和具有自定义删除程序的唯一指针之间的语法差异背后的任何原因
- 从VS 2015更新3更新到VS2015更新3 d后浮点计算行为不同的原因
- 如何在qt中同步应用程序和显示器的刷新率?
- Windows 进程间同步类似事件?
- 是否有技术原因阻止 Java 中的 final C++ 像 const 一样严格?
- 没有可行的过载'='错误,可能导致这种情况的原因是什么?
- 实现定义的文件流同步 - 原因