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("%s\n",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 会出错。