mmap
系統呼叫
(功能)
void* mmap ( void * addr , size_t len , int prot , int flags ,
int fd , off_t offset )
記憶體對映函式
mmap,
負責把檔案內容對映到
程序的虛擬記憶體空間
, 通過對這段記憶體的讀取
和修改,來實現對檔案的讀取和修改
,而不需
要再呼叫
read
,write
等操作。
addr:
指定對映的起始位址
, 通常設為
null,
由系統指定。 v
length:
對映到記憶體的檔案長度。 v
prot:
對映區的保護方式
, 可以是:
prot_exec
: 對映區可被執行
prot_read
: 對映區可被讀取
prot_write
: 對映區可被寫入
flags:
對映區的特性
, 可以是:
vmap_shared:
寫入對映區的資料會複製回檔案
, 且允許其他映
射該檔案的程序共享。 v
map_private:
對對映區的寫入操作會產生乙個對映區的複製
(copy-on-write),
對此區域所做的修改不會寫回
原檔案。
fd: 由
open
返回的檔案描述符
, 代表要對映的
檔案。offset:
以檔案開始處的偏移量
, 必須是分頁大小的
整數倍, 通常為
0, 表示從檔案頭開始對映。
解除對映
int munmap(void *start,size_t length)
功能:取消引數
start
所指向的對映記憶體,引數
length表
示欲取消的記憶體大小。
返回值:
解除成功返回
0,否則返回-
1,錯誤原因存於
errno中。
例項分析:
#include
#include
#include
#include
#include
#include
int main()
注意:mmap不能影響檔案長度,比如原來檔案只有5個字元長,經過mmap修改的檔案後只能最多存5個字元長。
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,也可直接使用系統呼叫。兩者有何區別呢?在輸入輸出中,直接使用底層的系統呼叫效率是非常低的,為什麼?...
Linux系統 mmap系統呼叫
函式原型 void mmap void addr size t len int prot int flags int fd off t offset 記憶體對映函式mmap,負責把檔案內容對映到程序的虛擬記憶體空間,通過對這段記憶體的讀取和修改,來實現對檔案的讀取和修改,而不需要再呼叫read,wr...