日期:2014-05-16  浏览次数:20517 次

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 会出错。