当前位置: 技术问答>linux和unix
mmap共享内存问题?
来源: 互联网 发布时间:2017-03-25
本文导语: int fd; void *buf; fd=open("/tmp/ggmm",O_RDWR | O_CREAT | O_TRUNC,00777); buf=mmap(NULL,11,PROT_READ|PROT_WRITE,MAP_SHARED,fd,0); close(fd); memmove(buf,"testmemory",10); //这里收到了SIGBUS信号,仿佛是mmap返回的地址不能...
int fd;
void *buf;
fd=open("/tmp/ggmm",O_RDWR | O_CREAT | O_TRUNC,00777);
buf=mmap(NULL,11,PROT_READ|PROT_WRITE,MAP_SHARED,fd,0);
close(fd);
memmove(buf,"testmemory",10);
//这里收到了SIGBUS信号,仿佛是mmap返回的地址不能读不能写,大侠们求解。老返回一个0xb7ffd000地址。
printf("%sn",buf);
munmap(buf,11);
|
在
fd=open("/tmp/ggmm",O_RDWR | O_CREAT | O_TRUNC,00777);
以后执行 一次写操作:比如:
char cbuf[12] = {0 };
write(fd, cbuf, sizeof(cbuf));
buf=mmap(NULL,11,PROT_READ|PROT_WRITE,MAP_SHARED,fd,0);
这样就没问题了。
你的程序之所以有问题, 是因为,你 map 的是一个空文件 。 所以 map 会出错。
fd=open("/tmp/ggmm",O_RDWR | O_CREAT | O_TRUNC,00777);
以后执行 一次写操作:比如:
char cbuf[12] = {0 };
write(fd, cbuf, sizeof(cbuf));
buf=mmap(NULL,11,PROT_READ|PROT_WRITE,MAP_SHARED,fd,0);
这样就没问题了。
你的程序之所以有问题, 是因为,你 map 的是一个空文件 。 所以 map 会出错。