linux c 内存映像的代码

Posted whoamboys

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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 内存映像的代码的主要内容,如果未能解决你的问题,请参考以下文章

Linux 进程通信(共享内存区)

Java进程通信之映像文件共享内存

Linux System.map文件

深入理解Java虚拟机——Java内存映像工具(Jmap)

深入理解Java虚拟机——Java内存映像工具(Jmap)

在Linux下用C语言编写程序,急求完整代码