使输入文件流的同步特定于实现的基本原理是什么?流会用来自外部设备的内容填充其缓冲区(部分或全部)似乎不是很明显吗?它在标准C++ IOStreams和Locales中说:
对于输出文件,同步定义为通过将缓冲区内容写入由调用
overflow()
执行的文件来清空内部缓冲区。对于输入文件,同步的含义不是由标准定义的,而是取决于 IOStreams 库的实现。
使实现对称并让输入文件流的缓冲区调用underflow()
还不够吗?做出这个决定的原因是什么?
写入具有更改文件的副作用,并且多个写入器竞相写入同一文件并不少见。同时写入和读取文件也是一个常见的用例。该标准基本上说overflow()
进行write()
系统调用(而不是缓冲fwrite()
)以将同步委托给操作系统。
读取对文件没有副作用(它可能会及时更新以变得迂腐),多个阅读器不会相互竞争,因此不需要同步。
另一方面,读取管道或套接字具有更改基础缓冲区内容的副作用。但是,竞争从同一管道,TCP或流UNIX套接字读取的读者没有多大意义。这对于数据报套接字可能有意义,但我不确定流的IOStreams是否设计用于数据报套接字。我收集标准编写器无法提出一个好的读取同步用例,因此未指定。