实现特定于输入文件流同步的原因是什么。流是否会显着填充其缓冲区(部分或全部)来自外部设备的内容?它在标准C ++中表示IOStreams和Locales:
对于输出文件,同步定义为通过调用
overflow()
将缓冲区内容写入文件来清空内部缓冲区。对于输入文件,同步的含义不是由标准定义的,而是取决于IOStreams库的实现。
使实现对称并使输入文件流'缓冲区调用underflow()
不够吗?这个决定的原因是什么?
答案 0 :(得分:2)
写入具有更改文件的副作用,并且多个写入竞争写入同一文件的编写器并不罕见。同时写入和读取文件也是一种常见的用例。该标准基本上表示overflow()
使write()
系统调用(而不是缓冲fwrite()
)将同步委托给操作系统。
阅读对文件没有任何副作用(它可能会将atime更新为迂腐),多个阅读器不会相互竞争,因此不需要同步。
另一方面,读取管道或套接字会产生更改底层缓冲区内容的副作用。但是,竞争从同一个管道,TCP或流UNIX套接字读取的读者没有多大意义。它可能对数据报套接字有意义,但我不确定IOStreams是否被设计为与数据报套接字一起使用。我收集标准编写器无法提供一个良好的读取同步用例,因此未指定。