1. 程式人生 > >檔案是資料(位元組)流的抽象-為什麼C++中會把檔案操作抽象為fstream?

檔案是資料(位元組)流的抽象-為什麼C++中會把檔案操作抽象為fstream?

這不過是返祖罷了。正確的問題是為什麼會把資料流抽象成檔案。

 

裝置-位元組流-檔案。

一切皆為檔案,所有不同種類的型別都被抽象成檔案(比如:塊裝置,socket套接字,pipe佇列)。

 

檔案抽象為資料流一定程度上是 Unix 造成的。

傳統上,計算機上用於 IO 的裝置大致可以分成兩大類,塊(block)裝置和流(stream)裝置。前者可以抽象成一組資料塊,讀寫必須資料塊為單位,但一般可以指定任意一個數據塊讀寫,典型的例子比如磁碟,以扇區為單位進行讀寫。後者可以抽象成一個數據流,你可以一個位元組一個位元組的讀寫,但寫出去的資料就是寫出去了,沒法再改,典型的例子比如串列埠,發出去一個位元組那就是發出去了。

然後呢,Unix 有個概念上很好、實踐中時不常要坑爹的設計,“一切 IO 皆檔案”(Everything is a file)。換句話說,一個“檔案”背後可能是個塊裝置,也可能是個流裝置 …… 顯然,塊裝置模擬流裝置很容易,反之則幾乎不可能,所以深受 Unix 影響的 C/C++ 在操作檔案的 api 上都傾向於資料流模型 —— 這不單是 C++ 的 iostream,仔細感受下 C 的 fscanf / fprintf / fputs ……

至於其他的資料互動模型,思路開啟一點就會發現到處都是啊!這裡只舉一個例子:一個程式怎麼讀寫資料庫裡的資料呢?



作者:謝之易
連結:https://www.zhihu.com/question/24734041/answer/28796441
來源:知乎
著作權歸作者所有。商業轉載請聯絡作者獲得授權,非商業轉載請註明出處。