歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> 一步一步學Linux C:內存映像那些事

一步一步學Linux C:內存映像那些事

日期:2017/3/1 10:26:34   编辑:Linux編程

內存映像其實就是在內存中創建一個和外存文件完全相同的映像。用戶可以將整個文件映射到內存中也可以部分映射到內存。系統會將對內存映像的改動如實的反映到外存文件中。從而實現了通過內存映像對外存文件的操作。

內存映像的特點:

1、 可以加快對IO的操作速度。

2、 用戶可以通過指針對文件進行操作,間接~~~

3、 實現了文件數據的共享,將外存文件映射到共享內存中,很方便的實現了數據共享,並能完成把數據保存到外存的工作。

注:內存映像只能對內部可以定位的文件進行操作,如普通文件。不能對管道,套接字文件進行操作。

創建內存映射:

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

start為指針通常設為NULL,表示映射內存有系統決定。因為指定內存會經常出錯。

length為內存映像占用的內存空間大小。以字節為單位。

port表示內存映像的安全性。

PROT_EXEC表示被映像內存可能有機器碼,可執行。

PORT_NONE表示被映像內存不能被訪問。

PORT_READ表示被映像內存可讀

PORT_WRITE表示被映像內存可寫


flag內存映像標志:

MAP_FIXED表示如果無法從start地址建立內存映像,則出錯返回。

MAP_PRIVATE表示對內存映像進行的改動不反映到外存文件中。

MAP_SHARED表示對內存映像進行的改動反映到外存文件中。

fd文件描述符

offset表示所映像的內容距文件頭的距離。

撤銷內存映射:

  1. #include<sys/types.h>
  2. #include<sys/mman.h>
  3. int munmap(void *start,size_t length);
Copyright © Linux教程網 All Rights Reserved