mmap 函数

mmap 函数

#include
void *mmap(void *addr,size_t len,int prot,int flags,int fd,off_t off);
成功-返回映射区域的起始地址,出错-返回MAP_FAILED

addr 参数用于指定映射存储区的起始地址。通常设置为NULL,表示由系统选择映射区的起始地址。此函数返回值是映射区的起始地址。
len  参数映射的长度
prot 参数制定映射区的保护要求,PROT_READ--映射区可读,PROT_WRITE--映射区可写,PROT_EXEC--映射区可执行,PROT_NONE--映射区不可访问。
     对指定的保护要求不能超过open模式访问权限。
flag 参数说明映射区的属性,MAP_SHARED--对映射区的改写将会写到源文件,MAP_PRIVATE--对映射区的改写将会写到源文件的副本,不影响源文件。
fd   参数是文件描述符
off  参数文件的偏移量

注意:1)mmap不能将数据添加到文件中,我们必须先加长文件。通常用ftruncat(int fd,int len)函数,构造文件长为len。
      2)子进程能够通过fork继承存储映射区,新程序则不能通过exec继承存储映射区。

#include
int mprotect(void *addr,size_t len,int prot);
成功-- 0,出错-- -1
addr 参数必须是系统页长的整数倍。
此函数是修改映射区的权限。


#include
int msync(void *addr,size_t len,int flags);
成功-- 0,出错-- -1
flags  参数MS_ASYNC--简单地调试要写的页,MS_SYNC--返回前等待写操作完成。
此函数是将映射区的变化写到文件里。


#include
int munmap(void *addr,size_t len);
成功-- 0,出错-- -1
此函数是解除存储映射区的映射。

你可能感兴趣的:(UNIX,环境高级编程)