2013-10-25 19 views
0

使輸入文件流實現同步的基本原理是什麼。這個流看起來不是很明顯,它會部分或全部用外部設備的內容填充緩衝區?它說,在標準C++輸入輸出流和區域設置:文件流的實現定義的同步 - 爲什麼?

對於輸出文件同步被定義爲通過寫緩衝器的內容通過調用overflow()執行文件排空內部緩衝器。對於輸入文件,同步的含義不是由標準定義的,而是取決於IOStreams庫的實現。

難道只要實現對稱並使輸入文件流的緩衝區調用underflow()?這個決定的理由是什麼?

+0

不,這並不明顯。文件可以是許多不同事物的抽象,只需在unix文件系統中查找即可。 –

回答

2

寫入有改變文件的副作用,並且多個寫入器競速寫入相同的文件並不少見。同時寫入和讀取文件也是一種常見的用例。該標準基本上說,overflow()使系統調用write()(而不是緩衝fwrite())委託同步到操作系統。

閱讀對文件沒有副作用(它可能會更新時間爲迂腐),多個閱讀器不會彼此競爭,因此不需要同步。

另一方面,讀取管道或套接字具有更改基礎緩衝區內容的副作用。然而,讀者競相從同一管道讀取TCP或流UNIX套接字沒有多大意義。這對數據報套接字來說可能是有意義的,但我不確定是否IOStreams是數據流套接字。我收集標準的作家不能提出一個很好的用於讀取同步的用例,因此沒有指定它。

相關問題