首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 操作系统 > UNIXLINUX >

m地图共享内存有关问题

2013-01-02 
mmap共享内存问题?int fdvoid *buffdopen(/tmp/ggmm,O_RDWR | O_CREAT | O_TRUNC,00777)bufmmap(NU

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

热点排行