mmap系統呼叫

2021-06-27 05:24:08 字數 1345 閱讀 7426

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...