
緩衝式 I/O
|
97
寫入操作稍微複雜一點,但是仍然可以避免兩次複製的情況。送出寫入要求時,此實作
會記錄指標。最後,當準備出清資料到核心時,此實作會掃描其所儲存的指標清單,以
便寫出資料。這項工作可經由
writev()
利用「分散∕聚集」(scatter/gather)I/O 來完
成,因此僅進行一次系統呼叫。(我們將在下一章探討分散∕聚集 I/O。)
而高度優化的用戶緩衝程式庫,用來解決兩次複製問題的實作,類似於我們剛才所做的
討論。此外,有些開發者選擇實作自己的用戶緩衝解決方案。儘管有這些替代方案,標
準 I/O 仍廣受歡迎。
結語
標準 I/O 是標準 C 程式庫所提供的用戶緩衝程式庫。如果不考慮它的幾個缺點,它可說
是一種有效而且受歡迎的解決方案。許多 C 程式員,實際上,只知道標準 I/O。當然,
對於終端機(terminal)I/O,以列為基礎的緩衝機制最為理想,標準 I/O 是唯一的選
擇。你通常不會直接使用
write()
將資料印往標準輸出!
當以下有任何一項為真時,就可以使用標準 I/O(一般來說,還包含用戶緩衝機制):
• 你可以預期會出現多次系統呼叫的問題,而你想要降低呼叫的次數以便儘量減少
開銷。
• 效能至關重要,而你想要確保所有 I/O 均在「對齊區塊的邊界上」採用區塊大小的
團塊。
• 你的存取方式,以字符或列為基礎,而你希望介面可以輕易使用這種存取方式,不
需要進行任何額外的系統呼叫。
• 相較於低階的 Linux 系統呼叫,你比較喜歡使用較高階的介面。
然而,當你直接使用 ...