1. 程式人生 > >linux c 內存映像的代碼

linux c 內存映像的代碼

表示 lag file mov private sha 撤銷 move sys

將代碼過程中比較重要的一些代碼段做個記錄,下邊資料是關於linux c 內存映像的代碼,應該是對大家有些用處。


#include<sys/types.h>

#include<sys/mman.h>




start為指針通常設為NULL,表示映射內存有系統決定。因為指定內存會經常出錯。length為內存映像占用的內存空間大小。以字節為單位。port表示內存映像的安全性。PROT_EXEC表示被映像內存可能有機器碼,可執行。PORT_NONE表示被映像內存不能被訪問。PORT_READ表示被映像內存可讀PORT_WRITE表示被映像內存可寫flag內存映像標誌:MAP_FIXED表示如果無法從start地址建立內存映像,則出錯返回。MAP_PRIVATE表示對內存映像進行的改動不反映到外存文件中。MAP_SHARED表示對內存映像進行的改動反映到外存文件中。fd文件描述符offset表示所映像的內容距文件頭的距離。撤銷內存映射:


#include<sys/types.h>

#include<sys/mman.h>




改變內存屬性:修改保護值:





flg用於設置是否在需要移動內存鏡像時移動該鏡像。如:MRMAP_MAYMOVE調用成功返回新的起始地址,失敗返回-1程序如下:


#include <stdio.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>
#include<unistd.h>
#include<sys/mman.h>

int main()
{
int fd;
char buf[100];

fd = open("testfile",O_RDWR);

start=mmap(NULL,lseek(fd,0,SEEK_END),PROT_READ|PROT_WRITE,MAP_SHARED,fd,0);

strcpy(buf,start);
printf("mmap = %sn",buf);

strcpy(start,"Buf Is Not Null!");
printf("mmap:%s",start);

close(fd);

return 0;
}





linux c 內存映像的代碼