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