remap_file_pages() - Unix,Linux系统调用
Tutorials Point


  Unix入门
  Unix Shell编程
  高级Unix
  Unix有用参考
  Unix有用资源
  精选阅读

版权所有 © 2014 tutorialspoint



  首页     参考资料     讨论论坛     关于TP  

remap_file_pages() - Unix,Linux系统调用


previous next AddThis Social Bookmark Button

广告

名称

remap_file_pages - 创建非线性文件映射

概要

#include <sys/mman.h>

int remap_file_pages(void *start, size_t size, int prot, ssize_t pgoff, int flags);

描述

remap_file_pages() 系统调用用于创建非线性映射,即文件页面以非顺序方式映射到内存中的映射。与重复调用mmap(2)相比,使用remap_file_pages() 的优势在于,前者不需要内核创建额外的VMA(虚拟内存区域)数据结构。

要创建非线性映射,我们执行以下步骤

标签描述
1. 使用mmap() 创建映射(最初是线性的)。此映射必须使用MAP_SHARED标志创建。
2. 使用一个或多个remap_file_pages() 调用来重新排列映射页面和文件页面之间的对应关系。可以将文件的同一页面映射到映射区域内的多个位置。
pgoffsize 参数指定要重新定位到映射中的文件区域:pgoff 是以系统页面大小为单位的文件偏移量;size 是区域的长度(以字节为单位)。

start 参数有两个用途。首先,它标识我们要重新排列其页面的映射。因此,start 必须是之前通过调用mmap() 映射的区域内的地址。其次,start 指定由pgoffsize 标识的文件页面将放置到的地址。

startsize 中指定的值应为系统页面大小的倍数。如果不是,则内核会将两者的值都向下舍入到最接近的页面大小的倍数。

prot 参数必须指定为 0。

flags 参数与mmap() 的含义相同,但MAP_NONBLOCK以外的所有标志都会被忽略。

返回值

成功时,remap_file_pages() 返回 0。出错时,返回 -1,并适当地设置errno

注释

remap_file_pages() 系统调用出现在 Linux 2.5.46 中。

错误

标签描述
EINVAL start 不引用使用MAP_SHARED标志创建的有效映射。
EINVAL startsizeprotpgoff 无效。

符合标准

remap_file_pages() 系统调用是 Linux 特定的。

参见



previous next Printer Friendly

广告


  

广告



广告