函式原型
void* mmap ( void * addr , size_t len , int prot , int flags ,int fd , off_t offset )
記憶體對映函式mmap, 負責把檔案內容對映到程序的虛擬記憶體空間, 通過對這段記憶體的讀取和修改,來實現對檔案的讀取和修改,而不需要再呼叫read,write等操作。
引數:
1)addr: 指定對映的起始位址, 通常設為null, 由系統指定。
2)length: 對映到記憶體的檔案長度。
3) prot: 對映區的保護方式, 可以是:
prot_exec: 對映區可被執行
prot_read: 對映區可被讀取
prot_write: 對映區可被寫入
4)flags: 對映區的特性, 可以是:
map_shared:寫入對映區的資料會複製回檔案, 且允許其他對映該檔案的程序共享。
map_private:對對映區的寫入操作會產生乙個對映區的複製(copy-on-write), 對此區域所做的修改不會寫回原檔案。
5)fd: 由open返回的檔案描述符, 代表要對映的檔案。
6)offset: 以檔案開始處的偏移量, 必須是分頁大小的整數倍, 通常為0, 表示從檔案頭開始對映。
解除對映
int munmap(void *start,size_t length)
功能:取消引數start所指向的對映記憶體,引數length表示欲取消的記憶體大小。
返回值:解除成功返回0,否則返回-1,錯誤原因存於errno中。
原始檔testfile的內容:#include
#include
#include
#include
#include
#include
int main()
小結:
mmap不會影響原來的檔案的長度,原先的檔案是多長就只對映相應長度的空間。
mmap系統呼叫
mmap 系統呼叫 功能 void mmap void addr size t len int prot int flags int fd off t offset 記憶體對映函式 mmap,負責把檔案內容對映到 程序的虛擬記憶體空間 通過對這段記憶體的讀取 和修改,來實現對檔案的讀取和修改 而不需...
mmap系統呼叫
void mmap void addr size t len int prot int flags int fd off t offset 記憶體對映函式mmap,負責把檔案內容對映到程序的虛擬記憶體空間,通過對這段記憶體的讀取和修改,來實現對檔案的讀取和修改,而不需要再呼叫read,write等操...
read系統呼叫,mmap系統呼叫
read系統呼叫,mmap系統呼叫 2012 07 23 09 54 28 分類 linux 標籤 linux 檔案系統 虛擬記憶體 儲存系統 字型大小 訂閱 一般情況下,操作檔案既可以使用標準i o,也可直接使用系統呼叫。兩者有何區別呢?在輸入輸出中,直接使用底層的系統呼叫效率是非常低的,為什麼?...