記憶體映像IO-Linux下C編程指南

來源:互聯網
上載者:User

標籤:style   blog   color   io   使用   ar   檔案   資料   art   

記憶體映像是通過將檔案對應到記憶體中去以提高檔案讀取速度。

此時可以使用指標快速存取檔案中的資料

1.

使用的函數

要將外部儲存的檔案對應到記憶體中,需要使用

#include<sys/types.h>#include<sys/mman.h>void *mmap(void *start.size_t length,int prot,int flag,int fd,off_t offset);

此時,若start不為NULL會將檔案對應到此位置,但是不保證一定能成功;

length表示佔用記憶體映像的大小,位元組記;

prot表示記憶體映像的安全屬性,可選項為:

PROT_EXEC              //被映射的記憶體可能可執行  PROT_NONE              // 被映射的記憶體不可訪問PROT_READ                //被映射的記憶體可讀PROT_WRITE            //被映射的記憶體可寫

flag表示記憶體映像的標誌

MAP_FIXED                //若無法在start建立映像,則出錯返回MAP_REIVATE            //對記憶體的改動不反映到外存檔案中MAP_SHARED            //將記憶體中的改動儲存到外存檔案中

off_t表示映像的內容距離檔案頭的位移量

 

調用失敗返回-1,否則返回映像記憶體起始地址

****注意需要在進程中開啟檔案才可以進行映射***

 

2.

修改記憶體映像的保護值prot

int protect(const void *addr,size_t length,int prot);

成功會返回0,出錯返回-1,且會將errno置為它。

 

3.

將記憶體映像寫入外存

int msync(const void *start,size_t length,int flag);flag的參數選項為:MS_ASYNC            //調度一個寫操作並返回MS_INVALIDATE       //將映像到相同檔案的映像無效以便使其更新為新資料MS_SYNC             //完成寫操作後函數返回

4.

修改映像記憶體大小

void *mremap(void *old_addr,size_t old_length,size_t new_length,unsigned long flag)

參數flag表示是否在需要時移動映像的位置

調用成功返回映像新地址,否則返回錯誤值-1

記憶體映像IO-Linux下C編程指南

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.