資料流如何能夠既適用于硬碟上的檔案,也適用于列印機?在 "流 "之前是否有一個抽象層,將這些設備與它們各自的屬性分開?
uj5u.com熱心網友回復:
在 "流 "之前是否有一個抽象層,將設備與它們各自的屬性分開?
你已經標記了 C,并在問題標題中提到了它,但這并不是 C 語言或標準庫的特征。 C 語言提供了通過流進行的 I/O,但它并沒有說明以這種方式提供哪些型別的設備。
"一切皆為檔案 "的范式是 UNIX 的特點(你也標記了它)。 這就是抽象性的所在。 在 UNIX 上的托管 C 實作中運行的程式可以通過流來訪問不同種類的設備,因為作業系統提供了這樣的功能。 它也可以為所有這些設備使用相同的POSIX低級I/O功能,因為作業系統也提供了這種功能。 這實際上是設備驅動程式和作業系統內核要求它們提供的介面的領域。
uj5u.com熱心網友回復:
流是抽象(或至少是抽象的一部分)。 標準庫為您提供了一個單一的、一致的介面來進行流操作,無論目標是您的控制臺、磁盤上的檔案、列印機,還是其他目的地。 您只需呼叫fopen、fscanf、fwrite等,而無需擔心細節問題。
fopen, fread, fwrite等的實作,進行所有系統特定的呼叫,以便對檔案進行必要的操作或打開到其他設備的I/O通道。 而即使是這些通常也是由檔案系統和設備驅動程式提供的更高層次的抽象。 當然,Windows上的實作與*nix上的實作和MacOS上的實作所做的呼叫是不一樣的,等等。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/329902.html
標籤:
