linux基础知识——mmap

1.mmap函数

\qquad 返回值:成功时,返回创建的映射区首地址;失败时,返回宏MAP_FAILED
\qquad 参数:
\qquad \quad 第一个参数addr:建立映射区的首地址,有linux内核指定,使用时,直接传入NULL
\qquad \quad 第二个参数length:建立的映射区的大小;
\qquad \quad 第三个参数prot:映射区的权限PROT_READPROT_WRITEPROT_READ|PROT_WRITE
\qquad \quad 第四个参数flags:标志位参数,MAP_SHARED:会将映射区所做的操作反映到物理设备(磁盘)上;MAP_PRIVATE:映射区所做的操作不会反映到物理设备上。
\qquad \quad 第五个参数fd:用来建立映射区的文件描述符
\qquad \quad 第六个参数offset:映射文件的偏移(4k的整数倍)

2.mmap的代码举例
#include<stdio.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>
#include<stdlib.h>
#include<errno.h>
#include<string.h>
#include<sys/mman.h>
#include<unistd.h>

int main()
{
        int open_fd;
        open_fd = open("m.txt",O_RDWR|O_CREAT,0777);
        if(open_fd==-1){
                perror("m open fail");
                exit(1);
        }

        char* p = NULL;
        int ftruncate_fd;
        ftruncate_fd = ftruncate(open_fd,1024);
        if(ftruncate_fd==-1){
                perror("ftruncate fail");
                exit(1);
        }
        p = mmap(NULL,1024,PROT_READ|PROT_WRITE,MAP_SHARED,open_fd,0);
        if(p==MAP_FAILED){
                perror("mmap fail");
                exit(1);
        }
        strcpy(p,"hello world!\n");

        int close_mmap_fd;
        int close_fd;
        close_mmap_fd = munmap(p,1024);
        if(close_mmap_fd==-1){
                perror("close mmap fail");
                exit(1);
        }
        close_fd = close(open_fd);
        if(close_fd==-1){
                perror("m close fail");
                exit(1);
        }
        return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值