Io
如何判斷數據是寫入磁碟還是記憶體?
我正在學習Linux下的文件操作呼叫。
read()
and和許多其他函式使用write()
記憶體來提高性能,我知道fsync()
可以將數據從記憶體傳輸到磁碟設備。但是,是否有任何命令或系統呼叫可以確定數據是記憶體還是寫入磁碟?
僅當記憶體已經存在時,才(直接)從記憶體中讀取讀取數據。這意味著記憶體數據先前已被程序訪問並保存在記憶體中。沒有系統呼叫或任何方法可以讓程序知道要讀取的某些數據是否已經在記憶體中。
另一方面,一個程序可以選擇是要立即將寫入的數據儲存在磁碟上還是僅在通常情況下的可變延遲之後儲存。這是通過在打開文件時使用 O_SYNC 標誌來完成的。
還有一個 O_DIRECT 標誌,當支持時強制所有 I/O 繞過讀寫記憶體並直接進入磁碟。
最後,硬碟本身可以自由地實現自己的記憶體,因此即使在同步寫入呼叫返回後,也不能保證磁碟碟片上已經存在數據。