12 關於緩衝式I/O,下列敘述何者錯誤?
(A) 可以提升檔案存取效率
(B) 資料會先暫存在緩衝器中
(C) 系統當機時不會造成資料遺失
(D) 標準C的庫存函數都具有緩衝功能
統計: A(1), B(0), C(6), D(1), E(0) #3399859
詳解 (共 2 筆)
【第一步:找關鍵字】
關鍵字:
-
緩衝式 I/O(buffered I/O)
-
暫存在緩衝器(buffer)
-
效率提升
-
不會造成資料遺失(陷阱關鍵字)
? 「不會」這種絕對語氣,通常要特別懷疑
【第二步:白話翻譯】
這題在問:
? 「資料先放在暫存區(buffer)再寫入檔案,這種做法有哪些說法是錯的?」
【第三步:解題思路】
這題在考什麼觀念?
? 緩衝機制的優點與風險
解題步驟
-
先理解什麼是緩衝
-
再想它的優點(快)
-
再想它的缺點(可能遺失資料)
-
找出不合理的敘述
原理與規則(生活比喻)
想像你在寫信:
-
沒有緩衝:寫一行就寄一封信(超慢)
-
有緩衝:寫一堆再一次寄(效率高)
? 但如果你還沒寄就發生意外(停電)
? 那些信就會「消失」
【第四步:選項分析】
(A) 為什麼對?
✔ 正確
? 緩衝可以減少 I/O 次數
例如:
-
一次寫很多資料
→ 比每次寫一點更快
(B) 為什麼對?
✔ 正確
? 緩衝式 I/O 的核心就是:
資料先放在記憶體的 buffer,再寫入磁碟
(C) 為什麼錯?
✘ 錯誤(本題答案)
「系統當機時不會造成資料遺失」
? 這是錯的!
因為:
-
資料還在 buffer(記憶體)
-
還沒寫入磁碟
? 一當機 → buffer 清空 → 資料遺失
(D) 為什麼對?
✔ 正確
? 標準 C 函式(例如 printf, fwrite)
? 都是使用緩衝機制
(例如:行緩衝、全緩衝)
【觀念補充與延伸】
核心觀念定位
? 系統程式 / I/O 機制
? 常考基礎觀念
法條或定義
-
緩衝式 I/O(Buffered I/O):
使用記憶體暫存資料,減少實際 I/O 操作次數以提升效率
三種緩衝模式
| 類型 | 說明 |
|---|---|
| 全緩衝 | buffer 滿才寫 |
| 行緩衝 | 遇到換行寫 |
| 無緩衝 | 直接寫 |
觸類旁通(舉一反三)
對比概念
-
Buffered I/O vs Unbuffered I/O
? Buffered:快但有風險
? Unbuffered:慢但安全
變化題型
-
問:什麼情況要用 unbuffered?
? 即時性要求高(例如 log、金融交易)
【記憶口訣】
? 「先存快,但可能丟」
【常見陷阱】
學生最容易搞混的地方
以為緩衝一定是安全的
心理盲點
看到「提升效率」就以為沒有缺點
避坑指南
? 看到 buffer:
一定要問兩件事:
-
有沒有變快?(有)
-
有沒有風險?(也有)