linux下,怎么在内存指定位置定一个结构体对象

linux下,如何在内存指定位置定一个结构体对象。
如题。谢谢


定义函数
void *mmap(void *start,size_t length,int prot,int flags,int fd,off_t offsize);
函数说明
mmap()用来将某个文件内容映射到内存中,对该内存区域的存取即是直接对该文件内容的读写。参数start指向欲对应的内存起始地址,通常设为NULL,代表让系统自动选定地址,对应成功后该地址会返回。参数length代表将文件中多大的部分对应到内存。

不过有一点要注意,start要在在字节对齐的开始的位置.

long pos=0xb7fd7001;
pos=pos-(pos%getpagesize());
mapped=(char *)mmap((void*)pos,1024, PROT_READ | PROT_WRITE, MAP_SHARED, outfile,0);
printf("%x,%x\n",mapped,pos);


通常情况下,mmap映射的区域在进程虚拟地址空间的堆区。


Linux是多任务的操作系统,内存的使用是受到操作系统内核保护的,用户程序使用的地址是虚地址,所以
不能指定一个地址,直接使用这块内存,容易产生非法内存操作,出现段错误。
如果你写的程序是内核模块的话,可以直接使用内存,首先要保证这个地址没有其他的模块使用。
可以这样写:
unsigned char * padd = 0xxxxxxx;
然后声明一个自己的结构体指针:
struct xxx *px;
px = (struct xxx *)padd;
就可以直接使用0XXXXXXX这个地址了。

linux下,怎么在内存指定位置定一个结构体对象

相关文章:

你感兴趣的文章:

标签云: