linux c 內存映像的代碼
將代碼過程中比較重要的一些代碼段做個記錄,下邊資料是關於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 內存映像的代碼