进程通信--mmap文件内存映射

进程通信–mmap 文件内存映射

#include <sys/mman.h>

void *mmap(void *addr, size_t length, int prot, int flags,
           int fd, off_t offset);
int munmap(void *addr, size_t length);

PROT_EXEC   //Pages may be executed.
PROT_READ   // Pages may be read.
PROT_WRITE  // Pages may be written.
PROT_NONE   // Pages may not be accessed.

MAP_SHARED
MAP_PRIVATE
    

MAP_ANON
MAP_ANONYMOUS

mmap – 创建

  • 参数
    • addr 传NULL
    • length 映射区长度 要小于等于文件大小
    • prot
      • PROT_READ 可读
      • PROT_WRITE 可写
    • flags
      • MAP_SHARED 共享的 – 对内存的修改会影响到源文件
      • MAP_PRIVATE 私有的 – 如果进程 想要共享 不能选择这个
    • fd 文件描述符
    • offset 偏移量
  • 返回值
    • 成功返回 可用的内存首地址
    • 失败返回 MAP_FAILED (that is, (void *) -1)

munmap – 释放

  • 参数
    • addr 映射的地址 (mmap的返回值)
    • length mmap创建的长度
  • 返回值
    • 成功返回 0
    • 失败返回 -1

示例

#include<sys/types.h>
#include<sys/stat.h>
#include<unistd.h>
#include<sys/mman.h>
#include<stdio.h>
#include<string.h>
#include<fcntl.h>

int main(int argc, char* argv[])
{
    int fd = open("map.txt",O_RDWR);
    if(fd == -1){
        printf("文件打开失败\n");
        return -1;
    }

    // 创建
    char* buf = mmap(NULL,1024,PROT_WRITE|PROT_READ,MAP_SHARED,fd,0);
    if(buf == MAP_FAILED){
        printf("映射失败\n");
        return 0;
    }
    // 写入
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

去留意

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值