测试mmap

mmap  参数 :

addr : 依据边界颗粒度 (提升到某个页面的整数倍)

length , offset : 总是某个页面的整数倍 

页面大小 : sysconf(_SC_PAGE_SIZE); 一般 4096 或 8192

基础:

如果映射大小超过了文件大小 , 则在映射区写入的字节将被丢弃

以下例子 可使用 od -b -A d 1.dat 来查看写入情况

    int fd = open("1.dat",O_RDWR|O_CREAT|O_TRUNC,0777);

    ftruncate(fd,5000);

    //这里是 4096 字节
    int pagesize = sysconf(_SC_PAGE_SIZE);
    printf("pagesize : %d\n", pagesize);

    //1024 被提升到 4096 字节.
    char *p = (char*)mmap(NULL,1024,PROT_READ|PROT_WRITE,MAP_SHARED,fd,0);

    p[pagesize - 1] = 1;
    printf("p[%d] = %d\n" , pagesize,p[pagesize - 1]);

    //p[pagesize] = 1; //出错 . 超出了映射范围
    
    int fd = open("1.dat",O_RDWR|O_CREAT|O_TRUNC,0777);

    ftruncate(fd,5000);

    //这里是 4096 字节
    int pagesize = sysconf(_SC_PAGE_SIZE);
    printf("pagesize : %d\
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值