免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1217 | 回复: 0
打印 上一主题 下一主题

内存映射test [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-12-18 14:39 |只看该作者 |倒序浏览

                                               
               
                #include stdlib.h>
#include sys/mman.h>
#include fcntl.h>
#include stdio.h>
#include unistd.h>
#include errno.h>
#include string.h>

int main(void)
{
        int *p;
        int *p2;//
        int fd = open("hello", O_CREAT|O_RDWR);
        if (fd  0) {
                perror("open hello");
                exit(1);
        }
        p =(int*) mmap(NULL, 4100, PROT_WRITE|PROT_READ, MAP_SHARED, fd, 0);
        ftruncate(fd, 4100);
        if (p == MAP_FAILED) {
                perror("mmap1\n");
                exit(1);
        }
        ftruncate(fd, 5000);//改变文件大小
        p2 = (int*)mmap(NULL, 10, PROT_READ|PROT_WRITE, MAP_SHARED, fd, 1024*4);//
        if(p2 == MAP_FAILED)
        {
          printf(strerror(errno));
          exit(1);
        }
        close(fd);//关闭了文件操作符也不会有影响
        p[0] = 0x121212;
        p[1024] = 0x343434;
        p2[0] = 0x454545;
        p2[1] = 0x787878;
        munmap(p, 6);
        munmap(p2,10);
        
        return 0;
}

映射的位置和大小必须在文件中存在,否则会出错;
不按页面对其映射会映射失败,错误显示为Invalid argument;
越界写对map映射读写,会出现段错误;
               
               
               
               

本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u3/108358/showart_2125009.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP