0

使输入文件流实现特定于同步的基本原理是什么。流将用来自外部设备的内容(部分或全部)填充其缓冲区似乎不是很明显吗?它在标准 C++ IOStreams 和语言环境中说:

对于输出文件,同步定义为通过调用overflow(). 对于输入文件,同步的含义不是标准定义的,而是依赖于IOStreams库的实现。

使实现对称并让输入文件流的缓冲区调用就足够了underflow()吗?这个决定的原因是什么?

4

1 回答 1

2

写入具有更改文件的副作用,并且多个写入者竞相写入同一个文件并不少见。同时写入和读取文件也是一个常见的用例。该标准基本上说overflow()使write()syscall (而不是 buffered fwrite())将同步委托给操作系统。

读取对文件没有副作用(它可能会及时更新以变得迂腐),多个读取器不会相互竞争,因此不需要同步。

另一方面,读取管道或套接字具有改变底层缓冲区内容的副作用。然而,读者竞相从同一个管道、TCP 或流 UNIX 套接字中读取并没有多大意义。这可能对数据报套接字有意义,但我不确定作为流的 IOStreams 是否旨在与数据报套接字一起使用。我收集到标准编写者无法为读取同步提出一个好的用例,因此未指定它。

于 2013-10-25T22:31:47.107 回答