我想了解read()和MMAP()之間的特定差異。我對這兩方面都有一個基本的或正確的理解,但有一些基本的東西我沒有得到。不讀的Linux()將數據複製到進程的地址空間
我猜想答案就在這裏很簡單,但這裏的問題:
比方說,你打開一個文件「的test.txt」,這是不存在的文件緩存和你想讀前64個字節。我的理解是,首字節4k被讀入頁面緩存,然後64字節被複制到read()調用的緩衝區中。
我的問題:
1)當你在通過讀取數據的讀取()和4K存儲在文件系統緩存中,確實會佔用你的進程的虛擬內存地址空間,或者是隻是磁盤緩存空間可能/將在稍後被調出?我知道mmap會將文件(或文件的一部分)映射到進程地址空間,但我無法弄清楚read()是否使用進程地址空間。我的猜測是,它不是因爲read()不允許你隨機訪問文件的一部分(是否正確?)。
2)即該被複制到由讀取返回的緩衝器64個字節()要由該方法中使用,執行此數據佔用進程的地址空間,或只是磁盤空間緩存?