linux mmap 函数详解,Linux之mmap函数简介

本文主要讲述mmap 函数的使用,与驱动中 mmap 函数的实现

mmap 怎么使用,怎么实现,为什么 mmap 可以减少额外的拷贝?

下面简单详情。

一、 mmap 的使用#include void *mmap(void *addr, size_t len, int prot, int flag, int filedes, off_t off );int munmap(void *addr, size_t length);

函数属于系统调用级别,负责内存映射。

形容

mmap

把文件或者者设施映射到内存。这个函数在调用进程的虚拟地址空间中创立一块映射区域。

addr 指定映射区域的首地址。假如 addr 是 NULL ,那么由内核来选择一个地址来创立映射的区域,否则创立的时候会尽可能地使用 addr 的地址。在linux系统中,创立映射的时候应该是在下一个页面的边界创立, addr 是 NULL 的时候,程序的可移植性最好。

len 指定文件被映射的长度, 或者者映射区域的长度。

offset 指定从文件的哪个偏移位置开始映射。=offset= 必需是页面大小的整数倍页面的大小可以由 sysconf(_SC_PAGE_SIZE) 来返回.

prot 指定内存的保护模式(具体参见 man ), flags 指定区域在不同进程之间的共享方式,以及区域能否同步到相应的文件等等(具体参见 man ).

这个函数返回新创立的页面的地址。

munmap

取消 address 指定地址范围的映射。以后再引用取消的映射的时候就会导致非法内存的访问。

这里 address 应该是页面的整数倍, length 指定取消映射的地址长度。

成功的时候这个函数返回0, 失败的时候&#x

你可能感兴趣的:(linux,mmap,函数详解)