测试mmap

本文探讨了mmap参数的含义,包括addr、length和offset必须符合页面大小的整数倍。通常页面大小为4096或8192字节。当映射区域大于文件大小时,超出部分的写入将被忽略。通过举例说明了如何使用od工具检查写入数据。此外,提到了mmap在有名信号量和内存信号量场景的应用。
摘要由CSDN通过智能技术生成

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\
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值